public async Task <IActionResult> SendTotpCode(SendTotpCodeViewModel viewModel) { if (_signInManager.IsSignedIn(User)) { return(RedirectToAction("Index", "Home")); } if (ModelState.IsValid) { // Show expire time for user if (TempData.ContainsKey("PTC")) { var totpTempDataModel = JsonSerializer .Deserialize <PhoneTotpTempDataModel>(TempData["PTC"].ToString() !); if (totpTempDataModel.ExpireTime >= DateTime.Now) { // returns a expire time as int for show in View var differenceInSeconds = (int)(totpTempDataModel.ExpireTime - DateTime.Now).TotalSeconds; ModelState.AddModelError("PhoneNumber", $"برای ارسال دوباره کد لطفا {differenceInSeconds} ثانیه صبرکنید."); // For keep temp data after calling TempData.Keep("PTC"); return(View(viewModel)); } } var secretKey = Guid.NewGuid().ToString(); var totpCode = _phoneTotpProvider.GenerateTotp(secretKey); var userExist = await _userManager.Users .AnyAsync(user => user.PhoneNumber == viewModel.PhoneNumber); if (userExist) { // TODO - Send Totp Code to user. } // Convert model to json as string TempData["PTC"] = JsonSerializer.Serialize(new PhoneTotpTempDataModel() { SecretKey = secretKey, PhoneNumber = viewModel.PhoneNumber, ExpireTime = DateTime.Now.AddSeconds(_phoneTotpOptions.StepInSeconds) }); // return RedirectToAction("VerifyTotpCode", "Account"); return(Content(totpCode)); } ViewData["SendTotpCodeErrorMessage"] = null; return(View(viewModel)); }
public async Task <IActionResult> SendTotpCode(SendTotpCodeViewModel model) { if (_signInManager.IsSignedIn(User)) { return(RedirectToAction("Index", "Home")); } if (ModelState.IsValid) { var secretKey = Guid.NewGuid().ToString(); var totpCode = _phoneTotpProvider.GenerateTotp(secretKey); var userExists = await _userManager.Users .AnyAsync(user => user.PhoneNumber == model.PhoneNumber); if (userExists) { //TODO send totpCode to user. } //RedirectToAction("VerifyTotpCode"); //return Content(totpCode); try { if (TempData.ContainsKey("PTC")) { var totpTempDataModel = JsonSerializer.Deserialize <PhoneTotpTempDataModel>(TempData["PTC"].ToString() !); if (totpTempDataModel.ExpirationTime >= DateTime.Now) { var differenceInSeconds = (int)(totpTempDataModel.ExpirationTime - DateTime.Now).TotalSeconds; ModelState.AddModelError("", $"برای ارسال دوباره کد، لطفا {differenceInSeconds} ثانیه صبر کنید."); TempData.Keep("PTC"); return(View()); } return(View()); } TempData["PTC"] = JsonSerializer.Serialize(new PhoneTotpTempDataModel() { SecretKey = secretKey, PhoneNumber = model.PhoneNumber, ExpirationTime = DateTime.Now.AddSeconds(_phoneTotpOptions.StepInSeconds) }); var dd = _userManager.Users.Single(a => a.PhoneNumber == model.PhoneNumber); if (model.PhoneNumber == dd.PhoneNumber) { var user = await _Shopingcontex.Users.Where(u => u.PhoneNumber == model.PhoneNumber) .SingleOrDefaultAsync(); user.PhoneNumberConfirmed = false; user.DateTime = DateTime.Now; user.PasswordHash = model.Password; user.codeconfig = totpCode; await _Shopingcontex.SaveChangesAsync(); return(RedirectToAction("Register")); } } catch { var user = new ApplicationUser() { UserName = model.PhoneNumber, PhoneNumber = model.PhoneNumber, PhoneNumberConfirmed = false, DateTime = DateTime.Now, codeconfig = totpCode, }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { return(RedirectToAction("Register")); } foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } return(View(model)); } return(View()); ; }