예제 #1
0
        private void CheckIfUserExists(ResetCodeRepresentation resetCode)
        {
            var user = _userAuthenticationDataRepository.FindUserAuthByEmail(resetCode.Email);

            if (user == null)
            {
                throw new InvalidCommandException(
                          $"Cannot find user with email: {resetCode.Email} and with reset code {resetCode.ResetCode.Value}");
            }
        }
        private UserAuthenticationData FindUserAuthenticationData(ResetCodeRepresentation resetCode, ResetPasswordCommand request)
        {
            var user = _userAuthenticationDataRepository.FindUserAuthByEmail(resetCode.Email);

            if (user == null)
            {
                throw new InvalidCommandException($"Cannot find user with email {resetCode.Email} and with reset code {request.ResetCode.Value}");
            }

            return(user);
        }
        public ResetCodeRepresentation CreateResetPasswordCode(ResetCodeRepresentation resetCodeRepresentation)
        {
            var sql = "INSERT INTO dbo.ResetPasswordCode (Checked, DateCreated, Email) " +
                      "OUTPUT Inserted.Id, Inserted.ResetCode, Inserted.DateCreated, Inserted.Checked, Inserted.Email " +
                      "VALUES (@Checked, @DateCreated, @Email)";

            using (var connection = new SqlConnection(_settings.ConnectionString))
            {
                connection.Open();
                var resetCode = connection.QueryFirst <ResetCodeRepresentation>(sql,
                                                                                new
                {
                    Checked     = resetCodeRepresentation.Checked,
                    DateCreated = resetCodeRepresentation.DateCreated,
                    Email       = resetCodeRepresentation.Email
                });
                return(resetCode);
            }
        }
        protected override Task <RequestStatus> HandleCommand(RequestResetPasswordCommand request,
                                                              CancellationToken cancellationToken)
        {
            var userAuthData = FindUserAuthenticationData(request);

            var existingResetCode = _resetPasswordCodeRepository.CountResetCodesForEmail(userAuthData.Email);

            if (existingResetCode > 0)
            {
                _logger.LogDebug("Removing {ex} existing codes for email {email}", existingResetCode, userAuthData.Email);
                _resetPasswordCodeRepository.RemoveResetCodesByEmail(userAuthData.Email);
            }

            var resetCode = new ResetCodeRepresentation(0, "000000", DateTime.UtcNow, false, userAuthData.Email);

            resetCode = _resetPasswordCodeRepository.CreateResetPasswordCode(resetCode);

            _linkSenderService.SendResetLink(resetCode.ResetCode, userAuthData.UserName, userAuthData.Email);

            var requestStatus = RequestStatus.CreateFromCommandContext(request.CommandContext, Status.COMPLETED);

            return(Task.FromResult(requestStatus));
        }
        public void UpdateResetPasswordCode(ResetCodeRepresentation resetCodeRepresentation)
        {
            var sql = "UPDATE dbo.ResetPasswordCode " +
                      "SET Checked = @Checked, DateCreated = @DateCreated, Email = @Email " +
                      "WHERE Id = @Id";

            using (var connection = new SqlConnection(_settings.ConnectionString))
            {
                connection.Open();
                var affected = connection.Execute(sql,
                                                  new
                {
                    Id          = resetCodeRepresentation.Id,
                    ResetCode   = resetCodeRepresentation.ResetCode.Value,
                    Checked     = resetCodeRepresentation.Checked,
                    DateCreated = resetCodeRepresentation.DateCreated,
                    Email       = resetCodeRepresentation.Email
                });
                if (affected != 1)
                {
                    throw new Exception();
                }
            }
        }