protected override async Task HandleCore(RequestPasswordResetCodeCommand message) { _logger.Debug($"Received RequestPasswordResetCodeCommand for user '{message.Email}'"); var validationResult = await _validator.ValidateAsync(message); if (!validationResult.IsValid()) { throw new InvalidRequestException(validationResult.ValidationDictionary); } var existingUser = await _userRepository.GetByEmailAddress(message.Email); if (existingUser == null) { _logger.Info($"Request to reset email for unknown email address : '{message.Email}'"); return; } if (RequiresPasswordResetCode(existingUser)) { existingUser.AddSecurityCode(new SecurityCode { Code = _codeGenerator.GenerateAlphaNumeric(), CodeType = SecurityCodeType.PasswordResetCode, ExpiryTime = DateTimeProvider.Current.UtcNow.AddDays(1), ReturnUrl = message.ReturnUrl }); await _userRepository.Update(existingUser); } await _auditService.WriteAudit(new PasswordResetCodeAuditMessage(existingUser)); await _communicationService.SendPasswordResetCodeMessage(existingUser, Guid.NewGuid().ToString(), _linkBuilder.GetForgottenPasswordUrl(_hashingService.HashValue(Guid.Parse(existingUser.Id)))); }