public async Task <IActionResult> Validate([FromQuery] string token) { TempUser savedUser; try { // Get our Saved User from Memory savedUser = new CheckValidationTokenEvent().Process(_memoryCache, token); } catch (CheckValidationTokenException e) { return(Redirect($"{_config.Urls.Frontend}/{_config.Pages.ResendPage}")); } savedUser.PhoneNumber = savedUser.PhoneNumber.CleanPhone(); var exisitingUser = _context.AllUsers.FirstOrDefault(x => x.Id == savedUser.Id); // we have a user at this point, otherwise we would have thrown our processer error earlier // A new user, validate the first avaible sms if (!exisitingUser.Enabled) { // we call in order the Enable and Create events, which handle the prerequiste logic for handling either case exisitingUser = new EnableUserEvent().Process(_context, token, exisitingUser, savedUser); } else { // for exisiting users we dont need to create them but just to possibly validate a new communication channel exisitingUser = new ValidateExistingUserCommunication().Process(_context, savedUser); } var endToken = await _tokenService.GetToken(exisitingUser); return(Redirect($"{_config.Urls.Frontend}/{_config.Pages.AccountPage}?user={endToken.UserId}&token={endToken.Token}")); }
public async Task <IActionResult> Validate([FromBody] TokenCheck model) { // Get our Saved User from Memory var savedUser = new CheckValidationTokenEvent().Process(_memoryCache, model); var validatedUser = _context.Users.FirstOrDefault(x => x.PhoneNumber == savedUser.PhoneNumber); if (validatedUser == null) { // Our response is vague to avoid leaking information return(ResponseShell.Error("Invalid")); } validatedUser.LastLogin = DateTime.Now; _context.SaveChanges(); // Get our token var token = await _tokenService.GetToken(validatedUser); // All good, lets give out our token return(ResponseShell.Ok(token)); }