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