Пример #1
0
        /// <summary>
        /// Change user password
        /// </summary>
        /// <param name="current"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        public virtual async Task <ResultModel> ChangeUserPasswordAsync(string current, string next)
        {
            var resultModel = new ResultModel();
            var currentUser = (await GetCurrentUserAsync()).Result;

            if (currentUser == null)
            {
                resultModel.Errors.Add(new ErrorModel {
                    Key = string.Empty, Message = "User not found"
                });
                return(resultModel);
            }

            var result = await UserManager.ChangePasswordAsync(currentUser, current, next);

            if (result.Succeeded)
            {
                resultModel.IsSuccess = true;
                IdentityEvents.Users.UserPasswordChange(new UserChangePasswordEventArgs
                {
                    Email    = currentUser.Email,
                    UserName = currentUser.UserName,
                    UserId   = currentUser.Id,
                    Password = next
                });
                return(resultModel);
            }

            resultModel.AppendIdentityErrors(result.Errors);
            return(resultModel);
        }
Пример #2
0
        /// <summary>
        /// Remove user photo
        /// </summary>
        /// <returns></returns>
        public virtual async Task <ResultModel> RemoveUserPhotoAsync()
        {
            var resultModel = new ResultModel();
            var currentUser = (await GetCurrentUserAsync()).Result;

            if (currentUser == null)
            {
                resultModel.IsSuccess = false;
                resultModel.Errors.Add(new ErrorModel {
                    Key = string.Empty, Message = "User not found"
                });
                return(resultModel);
            }

            currentUser.UserPhoto = null;
            var result = await UserManager.UpdateAsync(currentUser);

            if (result.Succeeded)
            {
                resultModel.IsSuccess = true;
                return(resultModel);
            }

            resultModel.IsSuccess = false;
            resultModel.AppendIdentityErrors(result.Errors);
            return(resultModel);
        }
        /// <inheritdoc />
        /// <summary>
        /// Add roles to user
        /// </summary>
        /// <param name="user"></param>
        /// <param name="roles"></param>
        /// <returns></returns>
        public virtual async Task <ResultModel> AddToRolesAsync(GearUser user, ICollection <string> roles)
        {
            var result       = new ResultModel();
            var defaultRoles = new Collection <string> {
                GlobalResources.Roles.USER, GlobalResources.Roles.ANONIMOUS_USER
            };

            if (user == null || roles == null)
            {
                result.Errors.Add(new ErrorModel(string.Empty, "Bad parameters"));
                return(result);
            }

            var exist = await UserManager.FindByEmailAsync(user.Email);

            if (exist == null)
            {
                result.Errors.Add(new ErrorModel(string.Empty, "User not found"));
                return(result);
            }

            foreach (var defaultRole in defaultRoles)
            {
                if (roles.Contains(defaultRole))
                {
                    continue;
                }
                roles.Add(defaultRole);
            }

            var existentRoles = await UserManager.GetRolesAsync(exist);

            var newRoles = roles.Where(x => !existentRoles.Contains(x)).ToList();

            var serviceResult = await UserManager.AddToRolesAsync(exist, newRoles);

            if (serviceResult.Succeeded)
            {
                result.IsSuccess = true;
            }
            else
            {
                result.AppendIdentityErrors(serviceResult.Errors);
            }

            return(result);
        }
Пример #4
0
        public virtual async Task <JsonResult> UploadUserPhoto([Required] IFormFile file)
        {
            var resultModel = new ResultModel();

            if (file == null || file.Length == 0)
            {
                resultModel.IsSuccess = false;
                resultModel.Errors.Add(new ErrorModel {
                    Key = string.Empty, Message = "Image not found"
                });
                return(Json(resultModel));
            }

            var currentUser = (await _userManager.GetCurrentUserAsync()).Result;

            if (currentUser == null)
            {
                resultModel.IsSuccess = false;
                resultModel.Errors.Add(new ErrorModel {
                    Key = string.Empty, Message = "User not found"
                });
                return(Json(resultModel));
            }

            using (var memoryStream = new MemoryStream())
            {
                await file.CopyToAsync(memoryStream);

                currentUser.UserPhoto = memoryStream.ToArray();
            }

            var result = await _userManager.UserManager.UpdateAsync(currentUser);

            if (result.Succeeded)
            {
                resultModel.IsSuccess = true;
                return(Json(resultModel));
            }

            resultModel.IsSuccess = false;
            resultModel.AppendIdentityErrors(result.Errors);
            return(Json(resultModel));
        }
Пример #5
0
        /// <summary>
        /// Logout user
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public virtual async Task <ResultModel> SignOutUserOnAllDevicesAsync(Guid?userId)
        {
            if (userId == null)
            {
                return(new InvalidParametersResultModel());
            }
            var user = await _userManager.UserManager.FindByIdAsync(userId.ToString());

            var result = await _userManager.UserManager.UpdateSecurityStampAsync(user);

            if (result.Succeeded)
            {
                return(new SuccessResultModel <object>().ToBase());
            }
            var errResponse = new ResultModel();

            errResponse.AppendIdentityErrors(result.Errors);
            return(errResponse);
        }
Пример #6
0
        /// <summary>
        /// Remove claims
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task <ResultModel> ClearUserClaimsAsync(GearUser user)
        {
            var response = new ResultModel();

            if (user == null)
            {
                return(response);
            }
            var claims = await _userManager.UserManager.GetClaimsAsync(user);

            var identityResult = await _userManager.UserManager.RemoveClaimsAsync(user, claims);

            if (identityResult.Succeeded)
            {
                response.IsSuccess = identityResult.Succeeded;
                return(response);
            }

            response.AppendIdentityErrors(identityResult.Errors);
            return(response);
        }
Пример #7
0
        /// <summary>
        /// Update base user profile
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public virtual async Task <ResultModel> UpdateBaseUserProfileAsync(UserProfileEditViewModel model)
        {
            var modelState = ModelValidator.IsValid(model);

            if (!modelState.IsSuccess)
            {
                return(modelState);
            }

            var resultModel        = new ResultModel();
            var currentUserRequest = await _userManager.GetCurrentUserAsync();

            if (!currentUserRequest.IsSuccess)
            {
                resultModel.Errors.Add(new ErrorModel(string.Empty, "User not found!"));
                return(resultModel);
            }

            var currentUser = currentUserRequest.Result;

            var isUsed = await _userManager.UserManager
                         .Users.AnyAsync(x => !x.Id.Equals(currentUser.Id) &&
                                         !x.Email.IsNullOrEmpty() &&
                                         x.Email.ToLowerInvariant()
                                         .Equals(model.Email.ToLowerInvariant()));

            if (isUsed)
            {
                resultModel.AddError("Email is used by another user");
                return(resultModel);
            }

            currentUser.FirstName      = model.FirstName;
            currentUser.LastName       = model.LastName;
            currentUser.Birthday       = model.Birthday;
            currentUser.AboutMe        = model.AboutMe;
            currentUser.PhoneNumber    = model.PhoneNumber;
            currentUser.EmailConfirmed = currentUser.EmailConfirmed && model.Email.Equals(currentUser.Email);
            currentUser.Email          = model.Email;

            if (!currentUser.EmailConfirmed)
            {
                EmailEvents.Events.TriggerSendConfirmEmail(new SendConfirmEmailEventArgs
                {
                    HttpContext = _accessor.HttpContext,
                    Email       = model.Email
                });
            }

            var result = await _userManager.UserManager.UpdateAsync(currentUser);

            if (result.Succeeded)
            {
                resultModel.IsSuccess = true;
                return(resultModel);
            }

            resultModel.AppendIdentityErrors(result.Errors);

            return(resultModel);
        }
        public async Task <JsonResult> VerifyAndCompletePhoneRegistration(TokenVerificationModel tokenVerification)
        {
            var verificationRequest = HttpContext.Session.Get <PhoneVerificationRequestModel>("phone_verification_request");

            if (verificationRequest == null)
            {
                var response = new ResultModel();
                response.Errors.Add(new ErrorModel(string.Empty, "A request to send the token to the phone was not made"));
                response.Errors.Add(new ErrorModel(string.Empty, $"To start, call: {nameof(StartRegisterBySendingVerificationRequest)}"));
                return(Json(response));
            }

            if (!ModelState.IsValid)
            {
                return(JsonModelStateErrors());
            }
            var validationResult = await _authy.VerifyPhoneTokenAsync(
                verificationRequest.PhoneNumber,
                verificationRequest.CountryCode,
                tokenVerification.Token
                );

            if (!validationResult.IsSuccess)
            {
                return(Json(validationResult));
            }
            var phone             = _authy.NormalizePhoneNumber(verificationRequest.CountryCode, verificationRequest.PhoneNumber);
            var addNewUserRequest = await _authy.RegisterUserAsync(new RegisterViewModel
            {
                CountryCode = verificationRequest.CountryCode,
                PhoneNumber = verificationRequest.PhoneNumber,
                Password    = verificationRequest.Pin,
                UserName    = verificationRequest.PhoneNumber
            });

            if (!addNewUserRequest.IsSuccess)
            {
                return(Json(addNewUserRequest));
            }

            var user = new GearUser
            {
                PhoneNumber          = phone,
                UserName             = phone,
                IsEditable           = true,
                PhoneNumberConfirmed = true
            };

            var createRequest = await _userManager.CreateUserAsync(user, verificationRequest.Pin);

            if (!createRequest.IsSuccess)
            {
                return(!createRequest.IsSuccess ? Json(createRequest) : Json(validationResult));
            }

            var setTokenResult = await _userManager
                                 .UserManager
                                 .SetAuthenticationTokenAsync(user, PhoneVerificationResources.LOGIN_PROVIDER_NAME, PhoneVerificationResources.AUTHY_TOKEN,
                                                              addNewUserRequest.Result);

            if (setTokenResult.Succeeded)
            {
                return(!createRequest.IsSuccess ? Json(createRequest) : Json(validationResult));
            }
            var tokenResponse = new ResultModel();

            tokenResponse.AppendIdentityErrors(setTokenResult.Errors);
            return(Json(tokenResponse));
        }