protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            try
            {
                if (HttpContext.Current.Request.Headers["authorization"] != null)
                {

                    string authString = HttpContext.Current.Request.Headers["authorization"];
                    string userId = HttpContext.Current.Request.Headers["x-jive-user-id"];

                    string[] authStringArray = authString.Split('&');
                    string tenantId = null;
                    string jiveUrl = null;
                    foreach (string authElement in authStringArray)
                    {
                        string[] keyValue = authElement.Split('=');
                        if (keyValue[0].Equals("tenant_id"))
                        {
                            tenantId = keyValue[1];
                        }

                        if (keyValue[0].Equals("jive_url"))
                        {
                            jiveUrl = HttpUtility.UrlDecode(keyValue[1]);
                        }
                    }
                    string ownerId = userId + "@" + tenantId;

                    using (JiveSdkContext db = new JiveSdkContext())
                    {
                        User myUser = null;
                        var _myUser = db.Users
                            .Include("JiveInstance.Users")
                            .Where(u => u.UserId.Equals(ownerId));
                        if (_myUser.Count() > 0)
                        {
                            myUser = _myUser.First();
                        }
                        else
                        {
                            if (myUser == null)
                            {
                                string[] jiveInstanceTemp = ownerId.Split('@');
                                String userJiveInstance = jiveInstanceTemp[1];

                                JiveInstance jiveInstanceForUser = null;


                                // Find the instance ID for the user
                                var _jiveInstanceForUser = db.JiveInstances
                                    .Include("Users")
                                    .Where(j => j.JiveInstanceId.Equals(userJiveInstance));

                                jiveInstanceForUser = _jiveInstanceForUser.First();
                                if (jiveInstanceForUser.Users == null)
                                {
                                    jiveInstanceForUser.Users = new List<User>();

                                }


                                myUser = new User();
                                myUser.DateCreated = DateTime.Now;
                                myUser.HasInstalledApp = true;
                                myUser.IsComplete = false;
                                myUser.UserId = ownerId;
                                myUser.LastUpdated = DateTime.Now;
                                //
                                db.Users.Add(myUser);
                                myUser.JiveInstance = jiveInstanceForUser;
                                db.SaveChanges();
                                jiveInstanceForUser.Users.Add(myUser);




                                db.SaveChanges();
                            }
                        }

                        GenericIdentity MyIdentity = new GenericIdentity(ownerId);

                        String[] MyStringArray = { "User" };
                        GenericPrincipal MyPrincipal =
                            new GenericPrincipal(MyIdentity, MyStringArray);
                        Thread.CurrentPrincipal = MyPrincipal;
                        return true;


                    }
                }
                else
                {

                    return false;

                }

            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
                return false;
            }

        }
        public void SetAccess(string userId)
        {
            using (JiveSdkContext db = new JiveSdkContext())
            {
                try
                {


                    //Retrieve the current user from the database
                    //Not recommended for production where it would be more efficient
                    //to user a caching mechanism to minimize sql queries
                    var _myUser = db.Users
                                          .Include("JiveInstance")
                                          .Where(u => u.UserId == userId);
                    User myUser = null;

                    if (_myUser.Count() > 0)
                    {
                        myUser = _myUser.First();

                        if (myUser.DisplayName != null)
                        {
                            ViewBag.ownerName = myUser.DisplayName;
                        }
                        else
                        {
                            ViewBag.ownerName = "Display name not set in DB";

                        }

                        ViewBag.ownerId = userId;
                        ViewBag.jiveUrl = myUser.JiveInstance.Url;
                        string culture = Thread.CurrentThread.CurrentCulture.ToString();
 

                    }
                    else
                    {
                        //This user is not registered in the database yet

                        string[] jiveInstanceTemp = userId.Split('@');
                        String userJiveInstance = jiveInstanceTemp[1];



                        // Find the instance ID for the user
                        var _jiveInstanceForUser = db.JiveInstances
                            .Include("Users")
                            .Include("JiveInstanceSettings")
                            .Where(j => j.JiveInstanceId.Equals(userJiveInstance));

                        if (_jiveInstanceForUser.Count() == 0)
                        {
                            //The JiveInstance does not exist yet. This is a legacy setting for apps delivered via the Jive Apps market
                            isNewJiveInstance = true;
                            jiveInstanceForUser = null;
                        }
                        else
                        {
                            isNewJiveInstance = false;
                            jiveInstanceForUser = _jiveInstanceForUser.First();
                            if (jiveInstanceForUser.Users.Count() == 0)
                            {
                                jiveInstanceForUser.Users = new List<User>();

                            }
                        }



                        //Create a new JiveInstance if no one has installed the app on this system yet
                        //This is a legacy setting for apps delivered via the Jive Apps market
                        if (isNewJiveInstance == true)
                        {

                            JiveInstance jiveInstance = new JiveInstance();
                            jiveInstance.JiveInstanceId = jiveInstanceTemp[1];
                            jiveInstance.DateCreated = DateTime.Now;
                            jiveInstance.LastUpdated = DateTime.Now;
                            jiveInstance.IsComplete = false;
                            jiveInstance.Users = new List<User>();
                            jiveInstance.IsLicensed = true;
                            jiveInstance.IsInstalledViaAddon = true;
                            db.JiveInstances.Add(jiveInstance);
                            db.SaveChanges();
                            jiveInstanceForUser = jiveInstance;

                        }



                        User user = new User();
                        user.UserId = userId;
                        user.JiveInstance = jiveInstanceForUser;
                        user.DateCreated = DateTime.Now;
                        user.LastUpdated = DateTime.Now;
                        user.HasInstalledApp = true;
                        
                        db.Users.Add(user);
                        db.SaveChanges();
                        jiveInstanceForUser.Users.Add(user);
                        db.SaveChanges();

                        ViewBag.jiveUrl = user.JiveInstance.Url;
                        ViewBag.ownerName = "Display name not set in DB";
                        ViewBag.ownerId = user.UserId;

                    }


                    //Setting some helper data into the viewbag, so we can efficiently build a page

                    //The baseUrl is the system on which our addon is hosted. We need this to set the base_href for our html pages correctly
                    string baseUrl = System.Configuration.ConfigurationManager.AppSettings["baseUrl"];
                    ViewBag.baseUrl = baseUrl;

                    //The appPath is the path of our application, e.g. https://myjiveaddon.azurewebsites.net/apps/app_path
                    //We might need this to build deep links to our application
                    string appPath = System.Configuration.ConfigurationManager.AppSettings["appPath"];
                    ViewBag.appPath = appPath;

                    //Version information for app and included resources. Due to the caching mechanisms in Jive
                    //we recommend to update this when you roll out new versions
                    string jsVersion = System.Configuration.ConfigurationManager.AppSettings["jsVersion"];
                    ViewBag.jsVersion = jsVersion;
                    string appJsVersion = System.Configuration.ConfigurationManager.AppSettings["appJsVersion"];
                    ViewBag.appJsVersion = appJsVersion;


                    ViewBag.jiveUrl = myUser.JiveInstance.Url;

                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.Message);
                  
                }
            }
        }