private string GetScript(GigyaSettingsViewModel model)
        {
            var builder = new StringBuilder();

            builder.AppendFormat(@"<script>
                var gigyaConfig = {{
                    errorMessage: '{0}',
                    id: '{1}',
                    loggedInRedirectUrl: '{2}',
                    logoutRedirectUrl: '{3}',
                    debugMode: {4},
                    authenticated: {5},
                    getInfoRequired: {6}
                }};
            </script>", HttpUtility.JavaScriptStringEncode(model.ErrorMessage),
                                 model.Id,
                                 HttpUtility.JavaScriptStringEncode(model.LoggedInRedirectUrl),
                                 HttpUtility.JavaScriptStringEncode(model.LogoutUrl),
                                 model.DebugMode.ToString().ToLowerInvariant(),
                                 model.IsLoggedIn.ToString().ToLowerInvariant(),
                                 model.IsGetInfoRequired.ToString().ToLowerInvariant()
                                 );
            builder.AppendFormat("<script src=\"https://cdns.{0}/js/gigya.js?apiKey={1}\">", model.DataCenter, model.ApiKey);
            builder.Append(model.SettingsJson);
            builder.Append("</script>");
            builder.AppendFormat("<script src=\"{0}\"></script>", model.GigyaScriptPath);
            if (model.DebugMode)
            {
                builder.Append("<script>window.gigyaDebugMode = true;</script>");
            }
            return(builder.ToString());
        }
        /// <summary>
        /// Creates a view model for use in a view.
        /// </summary>
        /// <param name="settings">The settings for the current site.</param>
        /// <param name="urlHelper">UrlHelper for the current request.</param>
        public virtual GigyaSettingsViewModel ViewModel(IGigyaModuleSettings settings, UrlHelper urlHelper, CurrentIdentity currentIdentity)
        {
            var model = new GigyaSettingsViewModel
            {
                ApiKey              = settings.ApiKey,
                DebugMode           = settings.DebugMode,
                GigyaScriptPath     = UrlUtils.AddQueryStringParam(_pathUtilities.ToAbsolute(ClientScriptPath(settings, urlHelper)), "v=" + CmsVersion + ModuleVersion),
                LoggedInRedirectUrl = settings.RedirectUrl,
                LogoutUrl           = settings.LogoutUrl,
                IsLoggedIn          = currentIdentity.IsAuthenticated,
                Id                = settings.Id,
                DataCenter        = settings.DataCenter,
                IsGetInfoRequired = settings.SessionProvider == Enums.GigyaSessionProvider.CMS
            };

            model.Settings = !string.IsNullOrEmpty(settings.GlobalParameters) ? JsonConvert.DeserializeObject <ExpandoObject>(settings.GlobalParameters) : new ExpandoObject();

            var settingsProperties = (IDictionary <string, object>)model.Settings;

            if (!settingsProperties.ContainsKey("lang"))
            {
                model.Settings.lang = Language(settings);
            }

            if (settings.SessionProvider == Enums.GigyaSessionProvider.Gigya && settings.GigyaSessionMode == Enums.GigyaSessionMode.Sliding)
            {
                // client needs -1 to specify a sliding session
                model.Settings.sessionExpiration = -1;
            }
            else if (settings.SessionProvider == Enums.GigyaSessionProvider.Gigya && settings.GigyaSessionMode == Enums.GigyaSessionMode.Forever)
            {
                // client needs -1 to specify a session that stays valid until the browser closes
                model.Settings.sessionExpiration = -2;
            }
            else if (settings.SessionProvider == Enums.GigyaSessionProvider.Gigya && settings.GigyaSessionMode == Enums.GigyaSessionMode.Session)
            {
                // client needs 0 to specify a session cookie
                model.Settings.sessionExpiration = 0;
            }
            else if (!settingsProperties.ContainsKey("sessionExpiration"))
            {
                model.Settings.sessionExpiration = settings.SessionTimeout;
            }

            model.SettingsJson = JsonConvert.SerializeObject(model.Settings);
            return(model);
        }