/// <summary>
        /// Get values from module config and load them into data members
        /// </summary>
        /// <param name="forEdit"></param>
        public void Load(Guid id)
        {
            using (var context = GigyaDSContext.Get())
            {
                // get settings for site or global settings or new settings
                var siteSettingsAndGlobal = context.Settings.Where(i => i.SiteId == id || i.SiteId == Guid.Empty).ToList();
                var settings = siteSettingsAndGlobal.FirstOrDefault(i => i.SiteId == id) ?? siteSettingsAndGlobal.FirstOrDefault() ?? new GigyaSitefinityModuleDsSettings {
                    SiteId = id, Mappings = new List <GigyaSitefinityDsMapping>()
                };

                // let client know that the data has been retrieved - hack as there is no "loaded" sitefinity client side event
                this.LoadedField = "Loaded";

                var mappingFields = settings.Mappings.Select(Map).OrderBy(i => i.CmsFieldName).ToList();
                this.MappingFields = JsonConvert.SerializeObject(mappingFields, new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });

                this.SiteId = settings.SiteId;
                this.Method = settings.Method;

                // get a list of available profile properties
                this.ProfileProperties = JsonConvert.SerializeObject(SitefinityUtils.GetProfileProperties().OrderBy(i => i.Value));
            }
        }
        private void LoginToSitefinityAdmin(int timeout = 0)
        {
            if (_sitefinityAdminDriver != null)
            {
                return;
            }

            _sitefinityAdminDriver = new FirefoxDriver();

            SitefinityUtils.LoginToSitefinity(_sitefinityAdminDriver, timeout);
        }
        // GET: LoginStatus
        public ActionResult Index()
        {
            var currentIdentity = ClaimsManager.GetCurrentIdentity();

            if (!currentIdentity.IsAuthenticated)
            {
                return(new EmptyResult());
            }

            // check if Sitefinity is the session leader and sign in if required
            GigyaAccountHelper.ProcessRequestChecks(System.Web.HttpContext.Current);

            var viewPath = FileHelper.GetPath("~/Mvc/Views/GigyaLogout/Index.cshtml", ModuleClass.ModuleVirtualPath + "Gigya.Module.Mvc.Views.GigyaLogout.Index.cshtml");

            var model = new GigyaLogoutViewModel
            {
                Label        = StringHelper.FirstNotNullOrEmpty(Label, "Logout"),
                LoggedOutUrl = SitefinityUtils.GetPageUrl(LogoutPageId)
            };

            return(View(viewPath, model));
        }
        // GET: LoginStatus
        public ActionResult Index()
        {
            var currentIdentity = ClaimsManager.GetCurrentIdentity();

            if (currentIdentity.IsAuthenticated)
            {
                // check if Sitefinity is the session leader and sign in if required
                GigyaAccountHelper.ProcessRequestChecks(System.Web.HttpContext.Current);
                return(new EmptyResult());
            }

            if (RenderMethod != Constants.Resources.Designer.EmbeddedScreen)
            {
                GenerateContainer = false;
                ContainerId       = null;
            }

            var viewPath = FileHelper.GetPath("~/Mvc/Views/GigyaLogin/Index.cshtml", ModuleClass.ModuleVirtualPath + "Gigya.Module.Mvc.Views.GigyaLogin.Index.cshtml");
            var model    = new GigyaLoginViewModel
            {
                Label                = StringHelper.FirstNotNullOrEmpty(Label, "Login"),
                ContainerId          = ContainerId,
                GeneratedContainerId = string.Concat("gigya-container-", Guid.NewGuid()),
                MobileScreenSet      = MobileScreenSet,
                ScreenSet            = StringHelper.FirstNotNullOrEmpty(ScreenSet, "Default-RegistrationLogin"),
                StartScreen          = StartScreen,
                LoggedInUrl          = SitefinityUtils.GetPageUrl(LoggedInPage)
            };

            if (RenderMethod == Constants.Resources.Designer.EmbeddedScreen && (GenerateContainer || string.IsNullOrEmpty(model.ContainerId)))
            {
                model.ContainerId = model.GeneratedContainerId;
            }

            return(View(viewPath, model));
        }
        /// <summary>
        /// Get values from module config and load them into data members
        /// </summary>
        /// <param name="forEdit"></param>
        public void Load(Guid id)
        {
            using (var context = GigyaContext.Get())
            {
                // get settings for site or global settings or new settings
                var siteSettingsAndGlobal = context.Settings.Where(i => i.SiteId == id || i.SiteId == Guid.Empty).ToList();
                var settings = siteSettingsAndGlobal.FirstOrDefault(i => i.SiteId == id) ?? siteSettingsAndGlobal.FirstOrDefault() ?? new GigyaSitefinityModuleSettings {
                    SiteId = id, EnableRaas = true
                };

                // map settigs to this
                this.ApiKey         = settings.ApiKey;
                this.ApplicationKey = settings.ApplicationKey;

                // check if user can view application secret
                var identity = ClaimsManager.GetCurrentIdentity();
                this.CanViewApplicationSecret = identity.IsAuthenticated && Connector.Admin.Roles.HasRole(identity);

                if (CanViewApplicationSecret && !string.IsNullOrEmpty(settings.ApplicationSecret) && Encryptor.IsConfigured)
                {
                    var key = TryDecryptApplicationSecret(settings.ApplicationSecret, false);
                    if (!string.IsNullOrEmpty(key))
                    {
                        this.ApplicationSecretMasked = StringHelper.MaskInput(key, "*", 2, 2);
                    }
                }

                this.LoadedField    = "Loaded";
                settings.DataCenter = Core.Connector.Helpers.GigyaSettingsHelper.MapOldDataCenter(settings.DataCenter);

                this.DataCenter       = string.IsNullOrEmpty(settings.DataCenter) || Core.Constants.DataCenter.DataCenters.Contains(settings.DataCenter) ? settings.DataCenter : string.Empty;
                this.DataCenterOther  = settings.DataCenter;
                this.DebugMode        = settings.DebugMode;
                this.EnableRaas       = settings.EnableRaas;
                this.GlobalParameters = settings.GlobalParameters;
                this.Language         = settings.Language;
                this.LanguageOther    = settings.Language;
                this.LanguageFallback = settings.LanguageFallback;
                this.SessionTimeout   = settings.SessionTimeout;
                this.SessionProvider  = settings.SessionProvider;
                this.GigyaSessionMode = settings.GigyaSessionMode;

                var mappingFields = !string.IsNullOrEmpty(settings.MappingFields) ? JsonConvert.DeserializeObject <List <MappingField> >(settings.MappingFields) : new List <MappingField>();
                AddMappingField(Constants.GigyaFields.UserId, Constants.SitefinityFields.UserId, ref mappingFields, true);
                AddMappingField(Constants.GigyaFields.FirstName, Constants.SitefinityFields.FirstName, ref mappingFields, true);
                AddMappingField(Constants.GigyaFields.LastName, Constants.SitefinityFields.LastName, ref mappingFields, true);
                AddMappingField(Constants.GigyaFields.Email, Constants.SitefinityFields.Email, ref mappingFields, true);

                // required fields first
                mappingFields = mappingFields.Where(i => !i.Required || !string.IsNullOrEmpty(i.CmsFieldName)).OrderByDescending(i => i.Required).ThenBy(i => i.CmsFieldName).ToList();

                this.MappingFields = JsonConvert.SerializeObject(mappingFields, new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });

                this.LogoutUrl   = settings.LogoutUrl;
                this.RedirectUrl = settings.RedirectUrl;
                this.SiteId      = settings.SiteId;

                // get a list of available profile properties
                var profileProperties = SitefinityUtils.GetProfileProperties();
                profileProperties.Add(new KeyValuePair <string, string>(Constants.SitefinityFields.UserId, Constants.SitefinityFields.UserId));
                profileProperties.Add(new KeyValuePair <string, string>(Constants.SitefinityFields.Email, Constants.SitefinityFields.Email));
                this.ProfileProperties = JsonConvert.SerializeObject(profileProperties.OrderBy(i => i.Value));
            }
        }