Exemple #1
0
        public GrantValidationResult Process(JObject userInfo, string email, string provider)
        {
            var userEmail      = email;
            var userExternalId = userInfo.Value <string>("id");



            if (string.IsNullOrWhiteSpace(userExternalId))
            {
                return(new GrantValidationResult(TokenRequestErrors.InvalidRequest, "could not retrieve user Id from the token provided"));
            }

            var existingUser = _userManager.FindByEmailAsync(userEmail).Result;

            if (existingUser != null)
            {
                var userClaims = _userManager.GetClaimsAsync(existingUser).Result;
                return(new GrantValidationResult(existingUser.Id, provider, userClaims, provider, null));
            }

            var new_user = new ApplicationUser {
                Email = userEmail, UserName = userEmail
            };
            var result = _userManager.CreateAsync(new_user).Result;

            if (result.Succeeded)
            {
                _externalUserRepository.Add(new ExternalUser {
                    ExternalId = userExternalId, Provider = provider, UserId = new_user.Id
                });
                var userClaims = _userManager.GetClaimsAsync(new_user).Result;
                return(new GrantValidationResult(new_user.Id, provider, userClaims, provider, null));
            }
            return(new GrantValidationResult(TokenRequestErrors.InvalidRequest, "could not create user , please try again."));
        }
        public GrantValidationResult Process(JObject userInfo, string provider)
        {
            var userEmail = userInfo.Value <string>("email");

            if (provider.ToLower() == "linkedin")
            {
                userEmail = userInfo.Value <string>("emailAddress");
            }

            var userExternalId = userInfo.Value <string>("id");

            if (userEmail == null)
            {
                var registeredUser = _externalUserRepository.Get().FirstOrDefault(x => x.ExternalId == userExternalId);
                if (registeredUser == null)
                {
                    var customResponse = new Dictionary <string, object>();
                    customResponse.Add("userInfo", userInfo);


                    return(new GrantValidationResult(TokenRequestErrors.InvalidRequest, "could not retrieve user's email from the given provider, include email paramater and send request again.", customResponse));
                }
                else
                {
                    var existingUser = _userManager.FindByIdAsync(registeredUser.UserId).Result;
                    var userClaims   = _userManager.GetClaimsAsync(existingUser).Result;
                    return(new GrantValidationResult(existingUser.Id, provider, userClaims, provider, null));
                }
            }
            else
            {
                var new_user = new ApplicationUser {
                    Email = userEmail, UserName = userEmail
                };
                var result = _userManager.CreateAsync(new_user).Result;
                if (result.Succeeded)
                {
                    _externalUserRepository.Add(new ExternalUser {
                        ExternalId = userExternalId, Provider = provider, UserId = new_user.Id
                    });
                    var userClaims = _userManager.GetClaimsAsync(new_user).Result;
                    return(new GrantValidationResult(new_user.Id, provider, userClaims, provider, null));
                }
                return(new GrantValidationResult(TokenRequestErrors.InvalidRequest, "user could not be created, please try again"));
            }
        }