예제 #1
0
        public bool ResetPassword(Users user, string password)
        {
            if (password == null)
            {
                return(false);
            }

            if (!BasicFieldsValidator.IsPasswordLengthValid(password))
            {
                return(false);
            }

            user.PasswordHash = Crypto.HashPassword(password);

            return(true);
        }
예제 #2
0
        public async Task <IActionResult> Update(UserUpdateRequest request)
        {
            var errors = new List <string>();

            var user = _unitOfWork.UsersRepository.GetByID(request.Id);

            if (user == null)
            {
                return(BadRequest(_localizer["InvalidUser"].Value));
            }

            if (!BasicFieldsValidator.IsDocumentIdLengthValid(request.DocumentId))
            {
                errors.Add(string.Format(_localizer["InvalidDocumentIdLength"].Value, BasicFieldsValidator.DocumentMinLength));
            }

            if (!BasicFieldsValidator.IsStringValid(request.UserName))
            {
                errors.Add(string.Format(_localizer["InvalidUserNameLength"].Value, BasicFieldsValidator.StandardStringMaxLength));
            }

            if (request.Address.Trim() != string.Empty && !BasicFieldsValidator.IsStringValid(request.Address))
            {
                errors.Add(string.Format(_localizer["InvalidUserAddressLength"].Value, BasicFieldsValidator.DatabaseStringMaxLength));
            }

            if (request.PhoneNumber.Trim() != string.Empty && !BasicFieldsValidator.IsStringValid(request.PhoneNumber))
            {
                errors.Add(string.Format(_localizer["InvalidUserPhoneNumberLength"].Value, BasicFieldsValidator.DatabaseStringMaxLength));
            }

            if (request.BirthDate.Year < 1900 && request.BirthDate.Year > DateTime.Today.AddYears(1).Year)
            {
                errors.Add(string.Format(_localizer["InvalidBirthDateRange"].Value, 1900, DateTime.Today.AddYears(1).Year));
            }

            if (errors.Any())
            {
                return(BadRequest(string.Join(Environment.NewLine, errors.Select(e => "- " + e).ToArray())));
            }

            user.UserName    = request.UserName;
            user.DocumentId  = request.DocumentId;
            user.BirthDate   = request.BirthDate;
            user.PhoneNumber = request.PhoneNumber;
            user.Address     = request.Address;

            try
            {
                _unitOfWork.UsersRepository.Update(user);
                await _unitOfWork.SaveAsync();
            }
            catch (SqlException)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, _localizer["DatabaseConnectionException"].Value));
            }
            catch (Exception)
            {
                return(BadRequest(_localizer["InvalidUserUpdate"].Value));
            }

            return(Ok(_localizer["UserUpdateConfirmationMessage"].Value));
        }
예제 #3
0
        public async Task <IActionResult> Register(RegisterRequest request)
        {
            List <string> errors = new List <string>();

            if (!BasicFieldsValidator.IsDocumentIdLengthValid(request.DocumentId))
            {
                errors.Add(string.Format(_localizer["InvalidDocumentIdLength"].Value, BasicFieldsValidator.DocumentMinLength));
            }

            if (!BasicFieldsValidator.IsStringValid(request.UserName))
            {
                errors.Add(string.Format(_localizer["InvalidUserNameLength"].Value, BasicFieldsValidator.StandardStringMaxLength));
            }

            if (!BasicFieldsValidator.IsEmailValid(request.Email))
            {
                errors.Add(_localizer["InvalidEmailFormat"].Value);
            }

            if (!BasicFieldsValidator.IsPasswordLengthValid(request.Password))
            {
                errors.Add(string.Format(_localizer["InvalidPasswordLength"].Value,
                                         BasicFieldsValidator.PasswordMinLength,
                                         BasicFieldsValidator.PasswordMaxLength));
            }

            if (request.Password != request.ConfirmPassword)
            {
                return(BadRequest(_localizer["InvalidPasswordsMatch"].Value));
            }

            if (request.ConfirmationUrl == null)
            {
                return(BadRequest(_localizer["MissingHiddenDataMessage"].Value));
            }

            if (errors.Any())
            {
                return(BadRequest(string.Join(Environment.NewLine, errors.Select(e => "- " + e).ToArray())));
            }

            var newUser = new Users
            {
                Id             = Guid.NewGuid().ToString(),
                DocumentId     = request.DocumentId,
                UserName       = request.UserName,
                Email          = request.Email,
                PasswordHash   = Crypto.HashPassword(request.Password),
                EmailConfirmed = true // TODO: DELETE THIS AFTER DEPLOYING THE EMAILING SERVICE
            };

            try
            {
                _unitOfWork.UsersRepository.Insert(newUser);
                await _unitOfWork.SaveAsync();

                var roles = _unitOfWork.RolesRepository.Get();

                _unitOfWork.UserRolesRepository.Insert(new UserRoles
                {
                    RoleId = roles.First(r => r.Name == SystemRoles.Client.ToString()).Id,
                    UserId = newUser.Id
                });

                var emailToken = Guid.NewGuid().ToString();

                _unitOfWork.UserTokensRepository.Insert(new UserTokens
                {
                    LoginProvider = Globals.EmailLoginProvider,
                    Name          = Globals.EmailTokenName,
                    UserId        = newUser.Id,
                    Value         = emailToken
                });

                await _unitOfWork.SaveAsync();

                var tokenVerificationUrl = HttpUtility.UrlDecode(request.ConfirmationUrl)
                                           .Replace("#Id", newUser.Id)
                                           .Replace("#Token", emailToken);
                await _emailService.SendEmailAsync(request.Email, _localizer["EmailVerificationSubject"].Value,
                                                   string.Format(_localizer["EmailVerificationMessage"].Value, tokenVerificationUrl));
            }
            catch (SqlException)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, _localizer["DatabaseConnectionException"].Value));
            }
            catch (Exception)
            {
                return(BadRequest(_localizer["InvalidUserCreation"].Value));
            }

            return(Ok(string.Format(_localizer["RegistrationConfirmationMessage"].Value, request.Email)));
        }