/// <summary>
        /// Authenticates a user in Umbraco.
        /// </summary>
        protected virtual bool AuthenticateUser(string username, IGigyaModuleSettings settings, bool updateProfile, dynamic gigyaModel, List <MappingField> mappingFields)
        {
            FormsAuthentication.SetAuthCookie(username, false);

            if (settings.DebugMode)
            {
                _logger.Debug(string.Concat("User [", username, "] successfully logged into Umbraco."));
            }

            if (updateProfile)
            {
                MapProfileFieldsAndUpdate(username, username, settings, gigyaModel, mappingFields);
            }
            return(true);
        }
        public static void ValidateAndLoginToGigyaIfRequired(HttpContext context, IGigyaModuleSettings settings = null)
        {
            if (context.Items.Contains(_checkedIfLoginRequiredKey))
            {
                return;
            }

            context.Items[_checkedIfLoginRequiredKey] = true;

            var settingsHelper   = new GigyaSettingsHelper();
            var logger           = LoggerFactory.Instance();
            var membershipHelper = new GigyaMembershipHelper(new GigyaApiHelper(settingsHelper, logger), logger);
            var accountHelper    = new GigyaAccountHelper(settingsHelper, logger, membershipHelper, settings);

            accountHelper.LoginToGigyaIfRequired();
        }
        /// <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);
        }
Пример #4
0
        protected override string Language(IGigyaModuleSettings settings)
        {
            var languageHelper = new GigyaLanguageHelper();

            var languageKey = CultureInfo.CurrentUICulture.Name.ToLowerInvariant();
            var currentSite = SystemManager.CurrentContext.CurrentSite;
            var cultures    = currentSite.PublicContentCultures;

            if (cultures != null && cultures.Length == 1 && !string.IsNullOrEmpty(currentSite.DefaultCulture))
            {
                languageKey = currentSite.DefaultCulture.ToLowerInvariant();
            }

            var culture = new CultureInfo(languageKey);

            return(languageHelper.Language(settings, culture));
        }
Пример #5
0
        protected bool PersistentAuthRequired(IGigyaModuleSettings settings)
        {
            if (settings.SessionProvider == Enums.GigyaSessionProvider.CMS || settings.SessionProvider != Enums.GigyaSessionProvider.Gigya)
            {
                // legacy behaviour
                return(false);
            }

            switch (settings.GigyaSessionMode)
            {
            case Enums.GigyaSessionMode.Session:
                return(false);

            default:
                return(true);
            }
        }
Пример #6
0
        /// <summary>
        /// Calls ds.get to get ds data.
        /// </summary>
        /// <param name="settings">Current module settings.</param>
        /// <param name="uid">The user Id.</param>
        /// <param name="oid">The oid of the ds field.</param>
        /// <param name="gigyaType">The ds type.</param>
        /// <param name="fields">The fields to retrieve.</param>
        public GSResponse Get(IGigyaModuleSettings settings, string uid, string oid, string gigyaType, IEnumerable <string> fields = null)
        {
            var request = NewRequest(settings, settings.ApplicationSecret, "ds.get");

            request.SetParam("UID", uid);
            request.SetParam("oid", oid);
            request.SetParam("type", gigyaType);

            if (fields != null && fields.Any())
            {
                var fieldsValue = string.Join(",", fields);
                request.SetParam("fields", fieldsValue);
            }

            var response = Send(request, "ds.get", settings);

            return(response);
        }
        private GigyaSettingsModel GetModel(int id, IGigyaModuleSettings data)
        {
            var model = Map(data);

            model.Inherited = model.Id != id;
            model.Id        = id;

            if (id > 0)
            {
                var node = new DynamicNode(id);
                model.SiteName = node.Name;
            }
            else
            {
                model.SiteName = "Global";
            }

            ApplyDefaults(ref model, data);
            return(model);
        }
        /// <summary>
        /// Gets Gigya Module settings for <paramref name="id"/>.
        /// </summary>
        /// <param name="id">The Id of the site.</param>
        /// <param name="decrypt">Whether to decrypt the application secret.</param>
        public virtual IGigyaModuleSettings Get(object id, bool decrypt = false)
        {
            var cacheKey = string.Concat(_cacheKeyBase, id, decrypt);
            IGigyaModuleSettings settings = null;

            var context = HttpContext.Current;

            if (context != null)
            {
                settings = context.Items[cacheKey] as IGigyaModuleSettings;
                if (settings != null)
                {
                    return(settings);
                }
            }

            var siteSettingsAndGlobal = GetForSiteAndDefault(id);

            settings = siteSettingsAndGlobal.OrderByDescending(i => i.Id).FirstOrDefault() ?? EmptySettings(id);

            // decrypt application secret
            if (decrypt && !string.IsNullOrEmpty(settings.ApplicationSecret))
            {
                settings.ApplicationSecret = Encryptor.Decrypt(settings.ApplicationSecret);
            }

            settings.MappedMappingFields = !string.IsNullOrEmpty(settings.MappingFields)
                ? JsonConvert.DeserializeObject <List <MappingField> >(settings.MappingFields) : new List <MappingField>();

            MapOldDataCenter(ref settings);

            if (context != null)
            {
                // cache for the rest of this request
                context.Items[cacheKey] = settings;
            }

            return(settings);
        }
        /// <summary>
        /// Gets the Gigya UID for the current logged in user. If the user isn't logged in, null is returned.
        /// </summary>
        /// <param name="settings">Current site settings.</param>
        /// <returns>The UID value.</returns>
        public string GetUidForCurrentUser(IGigyaModuleSettings settings)
        {
            // check user is logged in
            var currentIdentity = ClaimsManager.GetCurrentIdentity();

            if (!currentIdentity.IsAuthenticated)
            {
                return(null);
            }

            // get mapping field - hopefully the Sitefinity username field maps to Gigya's UID
            var field = settings.MappedMappingFields.FirstOrDefault(i => i.GigyaFieldName == Constants.GigyaFields.UserId);

            if (field == null || field.CmsFieldName == Constants.SitefinityFields.UserId)
            {
                return(currentIdentity.Name);
            }

            // get UID field from profile
            UserProfileManager profileManager = UserProfileManager.GetManager();
            UserManager        userManager    = UserManager.GetManager();

            var user = userManager.GetUser(currentIdentity.Name);

            if (user == null)
            {
                return(currentIdentity.Name);
            }

            var profile = profileManager.GetUserProfile <SitefinityProfile>(user);

            if (profile == null)
            {
                return(currentIdentity.Name);
            }

            return(profile.GetValue <string>(field.CmsFieldName));
        }
Пример #10
0
        private GSResponse Send(GSRequest request, string apiMethod, IGigyaModuleSettings settings)
        {
            GSResponse response = null;

            try
            {
                response = request.Send();
            }
            catch (Exception e)
            {
                return(LogError(response, apiMethod, e));
            }

            GigyaApiHelper.LogResponseIfRequired(_logger, settings, apiMethod, response);

            if (response.GetErrorCode() != 0)
            {
                LogError(response, apiMethod, null);
                return(null);
            }

            return(response);
        }
        /// <summary>
        /// Gets the Gigya language to use.
        /// </summary>
        /// <returns>A culture code.</returns>
        public string Language(IGigyaModuleSettings settings, CultureInfo currentCulture)
        {
            if (settings.Language != "auto")
            {
                return(settings.Language);
            }

            var language = currentCulture.Name.ToLowerInvariant();

            if (Languages.ContainsKey(language))
            {
                return(language);
            }

            // attempt to find non specific culture
            language = currentCulture.TwoLetterISOLanguageName.ToLowerInvariant();
            if (Languages.ContainsKey(language))
            {
                return(language);
            }

            return(settings.LanguageFallback);
        }
Пример #12
0
 public bool ValidateSignature(string userId, IGigyaModuleSettings settings, GSResponse response, bool disableSignatureExchange = false)
 {
     return(SigUtils.ValidateUserSignature(userId, response.GetString(Constants.GigyaFields.SignatureTimestamp, null),
                                           settings.ApplicationSecret, response.GetString(Constants.GigyaFields.UserIdSignature, null)));
 }
Пример #13
0
        /// <summary>
        /// Sends a request to the Gigya API.
        /// </summary>
        /// <param name="request">Request object.</param>
        /// <param name="apiMethod">The Gigya method to call.</param>
        /// <param name="settings">The Gigya module settings.</param>
        /// <param name="validateSignature">If set to true, the signature will be validated.</param>
        /// <returns></returns>
        private GSResponse Send(GSRequest request, string apiMethod, IGigyaModuleSettings settings, bool validateSignature)
        {
            if (apiMethod == "accounts.getAccountInfo")
            {
                var environment = new
                {
                    cms_name      = _settingsHelper.CmsName,
                    cms_version   = _settingsHelper.CmsVersion,
                    gigya_version = _settingsHelper.ModuleVersion
                };

                request.SetParam("environment", JsonConvert.SerializeObject(environment));
            }

            if (!string.IsNullOrEmpty(settings.DataCenter))
            {
                request.APIDomain = settings.DataCenter;
            }

            LogRequestIfRequired(settings, apiMethod);

            GSResponse response = null;

            try
            {
                response = request.Send();
            }
            catch (Exception e)
            {
                dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject();

                var gigyaError = response != null?response.GetErrorMessage() : string.Empty;

                var gigyaErrorDetail = DynamicUtils.GetValue <string>(gigyaModel, "errorDetails");
                var gigyaCallId      = DynamicUtils.GetValue <string>(gigyaModel, "callId");

                _logger.Error(string.Format("API call: {0}. CallId: {1}. Error: {2}. Error Details: {3}.", apiMethod, gigyaCallId, gigyaError, gigyaErrorDetail), e);
                return(response);
            }

            LogResponseIfRequired(settings, apiMethod, response);

            if (response.GetErrorCode() != 0)
            {
                return(response);
            }

            var userId = response.GetString(Constants.GigyaFields.UserId, null);

            if (string.IsNullOrEmpty(userId))
            {
                return(response);
            }

            // no need to validate server calls unless explicitly required e.g. for signature exchange
            if (validateSignature && !ValidateSignature(userId, settings, response))
            {
                if (settings.DebugMode)
                {
                    dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject();

                    var gigyaCallId = DynamicUtils.GetValue <string>(gigyaModel, "callId");

                    _logger.DebugFormat("Invalid user signature for login request. API call: {0}. CallId: {1}.", apiMethod, gigyaCallId);
                }
                return(null);
            }

            return(response);
        }
        /// <summary>
        /// Maps Gigya fields to a Sitefinity profile.
        /// </summary>
        /// <param name="profile">The profile to update.</param>
        /// <param name="gigyaModel">Deserialized Gigya JSON object.</param>
        /// <param name="settings">The Gigya module settings.</param>
        protected virtual void MapProfileFields(SitefinityProfile profile, dynamic gigyaModel, IGigyaModuleSettings settings, List <MappingField> mappingFields)
        {
            if (mappingFields == null)
            {
                return;
            }

            profile.FirstName = GetMappedFieldWithFallback(gigyaModel, Constants.SitefinityFields.FirstName, Constants.GigyaFields.FirstName, mappingFields);
            profile.LastName  = GetMappedFieldWithFallback(gigyaModel, Constants.SitefinityFields.LastName, Constants.GigyaFields.LastName, mappingFields);

            // map custom fields
            foreach (var field in mappingFields)
            {
                // check if field is a custom one
                switch (field.CmsFieldName)
                {
                case Constants.SitefinityFields.UserId:
                case Constants.SitefinityFields.FirstName:
                case Constants.SitefinityFields.LastName:
                case Constants.SitefinityFields.Email:
                    continue;
                }

                if (!string.IsNullOrEmpty(field.CmsFieldName) && profile.DoesFieldExist(field.CmsFieldName))
                {
                    object gigyaValue = GetGigyaValue(gigyaModel, field.GigyaFieldName, field.CmsFieldName);
                    if (gigyaValue != null)
                    {
                        try
                        {
                            profile.SetValue(field.CmsFieldName, gigyaValue);
                        }
                        catch (Exception e)
                        {
                            _logger.Error(string.Format("Couldn't set Sitefinity profile value for [{0}] and gigya field [{1}].", field.CmsFieldName, field.GigyaFieldName), e);
                        }

                        var profileValue = profile.GetValue(field.CmsFieldName);
                        if (profileValue == null || profileValue.ToString() != gigyaValue.ToString())
                        {
                            _logger.Error(string.Format("Sitefinity field [{0}] type doesn't match Gigya field [{1}] type. You may need to add a conversion using EventHub.Subscribe<IMapGigyaFieldEvent>", field.CmsFieldName, field.GigyaFieldName));
                        }
                    }
                    else if (settings.DebugMode)
                    {
                        _logger.DebugFormat("Gigya field \"{0}\" is null so profile field not updated.", field.GigyaFieldName);
                    }
                }
                else if (settings.DebugMode)
                {
                    _logger.DebugFormat("Sitefinity field \"{0}\" not found.", field.CmsFieldName);
                }
            }
        }
 public GigyaSitefinityDsHelper(IGigyaModuleSettings settings, Logger logger, GigyaDsSettings dsSettings, GigyaDsApiHelper apiHelper = null) : base(settings, logger, dsSettings, apiHelper)
 {
 }
 private static List <MappingField> GetMappingFields(IGigyaModuleSettings settings)
 {
     return(!string.IsNullOrEmpty(settings.MappingFields) ? JsonConvert.DeserializeObject <List <MappingField> >(settings.MappingFields) : new List <MappingField>());
 }
 public GigyaAccountHelperBase(GigyaSettingsHelper settingsHelper, Logger logger, IGigyaMembershipHelper membershipHelper, IGigyaModuleSettings settings = null)
 {
     _settings         = settings ?? settingsHelper.GetForCurrentSite(true);
     _logger           = logger;
     _settingsHelper   = settingsHelper;
     _membershipHelper = membershipHelper;
 }
 protected abstract string Language(IGigyaModuleSettings settings);
Пример #19
0
 private GSRequest NewRequest(IGigyaModuleSettings settings, string method)
 {
     return(NewRequest(settings, settings.ApplicationSecret, method));
 }
        /// <summary>
        /// Login or register a user.
        /// </summary>
        /// <param name="model">Details from the client e.g. signature and userId.</param>
        /// <param name="settings">Gigya module settings.</param>
        /// <param name="response">Response model that will be returned to the client.</param>
        public virtual void LoginOrRegister(LoginModel model, IGigyaModuleSettings settings, ref LoginResponseModel response)
        {
            response.Status = ResponseStatus.Error;

            if (!settings.EnableRaas)
            {
                if (settings.DebugMode)
                {
                    _logger.Debug("RaaS not enabled so login aborted.");
                }
                return;
            }

            if (!_gigyaApiHelper.ValidateApplicationKeySignature(model.UserId, settings, model.SignatureTimestamp, model.Signature))
            {
                if (settings.DebugMode)
                {
                    _logger.Debug("Invalid user signature for login request.");
                }
                return;
            }

            // get user info
            var userInfoResponse = _gigyaApiHelper.GetAccountInfo(model.UserId, settings);

            if (userInfoResponse == null || userInfoResponse.GetErrorCode() != 0)
            {
                _logger.Error("Failed to getAccountInfo");
                return;
            }

            List <MappingField> mappingFields = GetMappingFields(settings);
            var gigyaModel = GetAccountInfo(model.Id, settings, userInfoResponse, mappingFields);

            ThrowTestingExceptionIfRequired(settings, gigyaModel);

            // find what field has been configured for the CMS username
            var username = GetCmsUsername(mappingFields, gigyaModel);

            UserManager manager    = UserManager.GetManager();
            var         userExists = manager.UserExists(username);

            if (!userExists)
            {
                // user doesn't exist so create a new one
                using (new ElevatedModeRegion(manager))
                {
                    var createUserStatus = CreateUser(username, gigyaModel, settings, mappingFields);
                    if (createUserStatus != MembershipCreateStatus.Success)
                    {
                        return;
                    }
                }
            }

            // user logged into Gigya so now needs to be logged into Sitefinity
            var authenticated = AuthenticateUser(username, settings, userExists, gigyaModel, mappingFields);

            response.Status = authenticated ? ResponseStatus.Success : ResponseStatus.Error;
            if (authenticated)
            {
                response.RedirectUrl = settings.RedirectUrl;

                var settingsHelper = new GigyaSettingsHelper();
                var accountHelper  = new GigyaAccountHelper(settingsHelper, _logger, this, settings);
                accountHelper.UpdateSessionExpirationCookieIfRequired(HttpContext.Current, true);
            }
        }
 private void MapOldDataCenter(ref IGigyaModuleSettings settings)
 {
     settings.DataCenter = MapOldDataCenter(settings.DataCenter);
 }
        /// <summary>
        /// Updates the users Sitefinity profile.
        /// </summary>
        /// <param name="username">Id of the user to update.</param>
        /// <param name="settings">Gigya module settings for this site.</param>
        /// <param name="gigyaModel">Deserialized Gigya JSON object.</param>
        protected virtual bool MapProfileFieldsAndUpdate(string currentUsername, string updatedUsername, IGigyaModuleSettings settings, dynamic gigyaModel, List <MappingField> mappingFields)
        {
            UserProfileManager profileManager = UserProfileManager.GetManager();
            UserManager        userManager    = UserManager.GetManager();

            using (new ElevatedModeRegion(userManager))
            {
                var user = userManager.GetUser(currentUsername);
                user.Email = GetMappedFieldWithFallback(gigyaModel, Constants.SitefinityFields.Email, Constants.GigyaFields.Email, mappingFields);

                if (user.UserName != updatedUsername)
                {
                    user.SetUserName(updatedUsername);
                }

                SitefinityProfile profile = profileManager.GetUserProfile <SitefinityProfile>(user);

                if (profile == null)
                {
                    profile = profileManager.CreateProfile(user, Guid.NewGuid(), typeof(SitefinityProfile)) as SitefinityProfile;

                    // only set this on creation as it's possible to get 2 users with the same email address
                    profile.Nickname = user.Email;
                }

                // map any custom fields
                MapProfileFields(profile, gigyaModel, settings, mappingFields);

                try
                {
                    userManager.SaveChanges();
                    profileManager.SaveChanges();
                    return(true);
                }
                catch (Exception e)
                {
                    _logger.Error("Failed to update profile for userId: " + currentUsername, e);
                }
            }

            return(false);
        }
        /// <summary>
        /// Updates the users Umbraco profile.
        /// </summary>
        /// <param name="userId">Id of the user to update.</param>
        /// <param name="settings">Gigya module settings for this site.</param>
        /// <param name="gigyaModel">Deserialized Gigya JSON object.</param>
        protected bool MapProfileFieldsAndUpdate(string currentUsername, string updatedUsername, IGigyaModuleSettings settings, dynamic gigyaModel, List <MappingField> mappingFields)
        {
            var memberService = U.Core.ApplicationContext.Current.Services.MemberService;
            var user          = memberService.GetByUsername(currentUsername);

            var email = GetGigyaFieldFromCmsAlias(gigyaModel, Constants.CmsFields.Email, null, mappingFields);

            if (string.IsNullOrEmpty(email))
            {
                email = GetGigyaValue(gigyaModel, Constants.GigyaFields.Email, Constants.CmsFields.Email);
            }
            user.Email = email;

            if (user.Username != updatedUsername)
            {
                user.Username = updatedUsername;
            }

            // map any custom fields
            MapProfileFields(user, gigyaModel, settings, mappingFields);

            try
            {
                memberService.Save(user);
                return(true);
            }
            catch (Exception e)
            {
                _logger.Error("Failed to update profile for userId: " + currentUsername, e);
            }

            return(false);
        }
 public bool LoginByUsername(string username, IGigyaModuleSettings settings)
 {
     FormsAuthentication.SetAuthCookie(username, false);
     return(true);
 }
Пример #25
0
 private void LogResponseIfRequired(IGigyaModuleSettings settings, string apiMethod, GSResponse response)
 {
     LogResponseIfRequired(_logger, settings, apiMethod, response);
 }
        protected virtual string ClientScriptPath(IGigyaModuleSettings settings, UrlHelper urlHelper)
        {
            var scriptName = settings.DebugMode ? "gigya-cms.js" : "gigya-cms.min.js";

            return(string.Concat("~/scripts/", scriptName));
        }
Пример #27
0
 private GSRequest NewRequest(IGigyaModuleSettings settings, string applicationSecret, string method)
 {
     return(new GSRequest(settings.ApiKey, applicationSecret, method, null, true, settings.ApplicationKey));
 }
        /// <summary>
        /// Creates a new Sitefinity user from a Gigya user.
        /// </summary>
        /// <param name="username">The Id of the new user.</param>
        /// <param name="gigyaModel">Deserialized Gigya JSON object.</param>
        /// <param name="settings">Gigya module settings for the site.</param>
        /// <returns></returns>
        protected virtual MembershipCreateStatus CreateUser(string username, dynamic gigyaModel, IGigyaModuleSettings settings, List <MappingField> mappingFields)
        {
            UserManager        userManager    = UserManager.GetManager();
            UserProfileManager profileManager = UserProfileManager.GetManager();

            MembershipCreateStatus status;
            var email     = GetMappedFieldWithFallback(gigyaModel, Constants.SitefinityFields.Email, Constants.GigyaFields.Email, mappingFields);
            var firstName = GetMappedFieldWithFallback(gigyaModel, Constants.SitefinityFields.FirstName, Constants.GigyaFields.FirstName, mappingFields);
            var lastName  = GetMappedFieldWithFallback(gigyaModel, Constants.SitefinityFields.LastName, Constants.GigyaFields.LastName, mappingFields);

            User user = userManager.CreateUser(username, Guid.NewGuid().ToString(), email, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), true, null, out status);
            SitefinityProfile profile = null;

            switch (status)
            {
            case MembershipCreateStatus.Success:
                profile = CreateProfile(gigyaModel, settings, userManager, profileManager, user, mappingFields);
                break;

            case MembershipCreateStatus.DuplicateEmail:
                // insert fails if there is a duplicate email even though duplicate emails are allowed...strange huh
                var dummyEmail = string.Concat(Guid.NewGuid(), "@gigya.com");

                // try insert again with a dummy email and update it afterwards
                user = userManager.CreateUser(username, Guid.NewGuid().ToString(), dummyEmail, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), true, null, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    user.Email = email;
                    profile    = CreateProfile(gigyaModel, settings, userManager, profileManager, user, mappingFields);
                }
                break;
            }

            if (user == null)
            {
                return(status);
            }

            MapProfileFields(profile, gigyaModel, settings, mappingFields);

            try
            {
                userManager.SaveChanges();
                profileManager.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.Error("Failed to update profile for userId: " + username, e);
            }

            return(status);
        }
Пример #29
0
        /// <summary>
        /// Validates an application key signatures by calling accounts.exchangeUIDSignature and checking the response signature.
        /// </summary>
        public bool ValidateApplicationKeySignature(string userId, IGigyaModuleSettings settings, string signatureTimestamp, string signature)
        {
            var response = ExchangeSignature(userId, settings, signature, signatureTimestamp, settings.ApplicationKey);

            return(ValidateExchangeSignatureResponse(response));
        }
        /// <summary>
        /// Login or register a user.
        /// </summary>
        /// <param name="model">Details from the client e.g. signature and userId.</param>
        /// <param name="settings">Gigya module settings.</param>
        /// <param name="response">Response model that will be returned to the client.</param>
        public virtual void LoginOrRegister(LoginModel model, IGigyaModuleSettings settings, ref LoginResponseModel response)
        {
            response.Status = ResponseStatus.Error;

            if (!settings.EnableRaas)
            {
                if (settings.DebugMode)
                {
                    _logger.Debug("RaaS not enabled so login aborted.");
                }
                return;
            }

            if (!_gigyaApiHelper.ValidateApplicationKeySignature(model.UserId, settings, model.SignatureTimestamp, model.Signature))
            {
                if (settings.DebugMode)
                {
                    _logger.Debug("Invalid user signature for login request.");
                }
                return;
            }

            // get user info
            var userInfoResponse = _gigyaApiHelper.GetAccountInfo(model.UserId, settings);

            if (userInfoResponse == null || userInfoResponse.GetErrorCode() != 0)
            {
                _logger.Error("Failed to getAccountInfo");
                return;
            }

            var gigyaModel = JsonConvert.DeserializeObject <ExpandoObject>(userInfoResponse.GetResponseText());

            ThrowTestingExceptionIfRequired(settings, gigyaModel);

            // find what field has been configured for the Umbraco username
            List <MappingField> mappingFields = GetMappingFields(settings);
            var username = GetUmbracoUsername(mappingFields, gigyaModel);

            var memberService = U.Core.ApplicationContext.Current.Services.MemberService;
            var userExists    = memberService.Exists(username);

            if (!userExists)
            {
                // user doesn't exist so create a new one
                var user = CreateUser(username, gigyaModel, settings);
                if (user == null)
                {
                    return;
                }
            }

            // user logged into Gigya so now needs to be logged into Umbraco
            var authenticated = AuthenticateUser(username, settings, userExists, gigyaModel, mappingFields);

            response.Status = authenticated ? ResponseStatus.Success : ResponseStatus.Error;
            if (authenticated)
            {
                response.RedirectUrl = settings.RedirectUrl;
            }
        }