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))));
        }