public IActionResult RequestTemporaryPasscode([FromQuery] string username = null, [FromQuery] string email = null)
        {
            //Ensure at least one of the required parameters is present
            if (string.IsNullOrWhiteSpace(username) && string.IsNullOrWhiteSpace(email))
            {
                //Handle 400 Bad Request
                Logger.LogInformation("Issue temporary passcode failed, bad request");
                return(BadRequest());
            }

            //User requesting temporary passcode
            User user = null;

            //Attempt to fetch a user with the provided information
            if (!string.IsNullOrWhiteSpace(username))
            {
                user = _userRepo.GetUserByUsername(username);
            }
            else if (!string.IsNullOrWhiteSpace(email))
            {
                user = _userRepo.GetUserByEmail(email);
            }

            //Ensure a User entity was fetched
            if (user == null)
            {
                //User not found (Normally a 404, but we do not want to disclose in this case)
                Logger.LogInformation("Unable to find a User with the information provided, returning no content");
                return(NoContent());
            }

            //Create temporary passcode
            var tempPasscode = new TemporaryPasscode()
            {
                UserId             = user.Id,
                Passcode           = _base36GeneratorService.Generate(),
                PasscodeExpiration = DateTime.Now.AddMinutes(10)
            };

            _tempPasscodeRepo.CreateTemporaryPasscode(tempPasscode);

            //Ensure entity is persisted successfully
            if (!_tempPasscodeRepo.Save())
            {
                //Handle temporary passcode save fail
                Logger.LogError("Temporary passcode creation failed, server error", tempPasscode.Passcode);
                return(StatusCode(500, "An error occurred while creating the temporary passcode"));
            }

            //Send email to User
            Logger.LogInformation("Created temporary passcode [{0}] for username [{1}]", tempPasscode.Passcode, user.Username);
            _emailService.Send(user.Email, $"Your Username is {user.Username}.\n\nYour temporary passcode is {tempPasscode.Passcode}");

            return(NoContent());
        }
Exemple #2
0
 /// <summary>
 /// Repository method to create a TemporaryPasscode entity
 /// </summary>
 /// <param name="tempPasscode">The entity</param>
 public void CreateTemporaryPasscode(TemporaryPasscode tempPasscode)
 {
     //Add the new temporary passcode
     _dbContext.TemporaryPasscodes.Add(tempPasscode);
 }