public async Task <IActionResult> ConfirmEmail(EmailConfirmationModel model) { try { if (!ModelState.IsValid) { throw new InvalidOperationException("Input Parameters Not In Correct Format"); } var email = await EmailConfirmationService.ConfirmEmail(model.UserId, model.Token); string redirectUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host.Value}/EmailConfirmationSuccessful"; EmailConfirmationResponse emailConfirmationResponse = new EmailConfirmationResponse { Email = email, ConfirmationStatus = EmailConfirmation.CONFIRMED }; return(Ok(emailConfirmationResponse, "Email Confirmed Successfully", ResponseStatus.OK)); } catch (InvalidOperationException ex) { EmailConfirmationResponse emailConfirmationResponse = new EmailConfirmationResponse { ConfirmationStatus = EmailConfirmation.UNCONFIRMED }; var user = await UserManager.FindByIdAsync(model.UserId); if (user != null) { emailConfirmationResponse.Email = user.Email; } return(BadRequest(emailConfirmationResponse, ex.Message, ResponseStatus.APP_ERROR)); } catch (Exception ex) { EmailConfirmationResponse emailConfirmationResponse = new EmailConfirmationResponse { ConfirmationStatus = EmailConfirmation.UNCONFIRMED }; var user = await UserManager.FindByIdAsync(model.UserId); if (user != null) { emailConfirmationResponse.Email = user.Email; } return(BadRequest(emailConfirmationResponse, "Oops Something Went Wrong", ResponseStatus.FATAL_ERROR)); } }
public ActionResult <EmailConfirmationResponse> PostConfirmEmail(string token) { try { EmailConfirmationResponse confirmation = new EmailConfirmationResponse(); var decryptedToken = security.DecryptTokenObject(token); var user = context.Users.Where(u => u.EmailAddress == decryptedToken.EmailAddress).FirstOrDefault(); if (user.ConfirmationToken != decryptedToken.Token) { confirmation.Messages.Add("Unauthorized"); confirmation.Success = false; return(confirmation); } if (user.ConfirmationToken == decryptedToken.Token && DateTime.Now < user.ConfirmationTokenExpires) { user.EmailConfirmed = true; user.ConfirmationToken = security.GenerateConfirmationToken(); user.ConfirmationTokenExpires = DateTime.Now.AddMinutes(security.ConfirmationTokenExpiresMinutes()); context.SaveChanges(); confirmation.Token = security.EncryptTokenObject(user.EmailAddress, user.ConfirmationToken); confirmation.Success = true; confirmation.Messages.Add("Email Confirmed"); return(confirmation); } else { confirmation.Token = ""; confirmation.Success = false; confirmation.Messages.Add("Link Expired. Please contact the system Administrator."); return(confirmation); } } catch (Exception ex) { throw; } }