public async Task <IActionResult> OnPostAsync(string code) { ReturnUrl ??= "/Index"; if (!TempData.TryGetValue("VerificationSecret", out object secretKey)) { return(RedirectToPage("/User/Login", new { ReturnUrl })); } if (!TempData.TryGetValue("Phone", out object phone)) { return(RedirectToPage("/User/Login", new { ReturnUrl })); } var internationalPhone = new InternationalPhone((string)phone); var info = new UserVerificationInfo(internationalPhone, (string)secretKey); if (!verificationService.CheckVerificationCode(info, code)) { // Prevent deletion of secret if code was entered incorrectly. TempData.Keep(); return(Page()); } await identityService.SignInOrRegisterWithPhoneAsync(internationalPhone); return(LocalRedirect(ReturnUrl)); }
public async Task <IActionResult> Post(string username) { if (username == null) { return(this.NotFound()); } try { var userVerificationInfo = new UserVerificationInfo { Username = username, CreationDate = DateTime.Now, ExpirationDate = DateTime.Now.AddHours(2) }; using (var rng = new RNGCryptoServiceProvider()) { var buffer = new byte[8]; rng.GetBytes(buffer); userVerificationInfo.VerificationKey = Convert.ToBase64String(buffer); } var result = (Error)await this._dm.OperateAsync <UserVerificationInfo, object>( Constants.AddVerificationKey, userVerificationInfo); if (result == Error.VerificationCodeCreationFail) { this._logger.Log( LogHelper.CreateLog(DateTime.Now, LogType.Fail, Constants.VerificationKeyCreationFail, null)); return(this.BadRequest(Constants.VerificationKeyCreationFail)); } if (result == Error.VerificationCodeCreationSuccess) { var user = (User)await this._dm.OperateAsync <string, User>( Constants.GetUserByUsername, userVerificationInfo.Username); await this._mailer.SendAsync( user.Email, Constants.VerificationSubject, false, userVerificationInfo.VerificationKey); return(this.Ok(Constants.VerificationCreationSuccess)); } return(this.BadRequest()); } catch (Exception ex) { this._logger.Log( LogHelper.CreateLog(DateTime.Now, LogType.Fatal, Constants.VerificationKeyCreationFail, ex)); return(this.StatusCode(StatusCodes.Status500InternalServerError)); } }
public IActionResult Put([FromBody] UserVerificationInfo userVerificationInfo) { // if user verification succeeds return 200 if (this._verifier.Verify(userVerificationInfo)) { return(new StatusCodeResult(200)); } // return Bad Request code return(new StatusCodeResult(400)); }
public async Task <IActionResult> OnPostAsync(string phone) { if (InternationalPhone.TryParse(phone, out InternationalPhone parsed)) { UserVerificationInfo info = await verificationService.SendVerificationCodeAsync(parsed); TempData["VerificationSecret"] = info.SecretKey; TempData["Phone"] = info.Phone.Formatted; return(RedirectToPage("/User/Verify", new { ReturnUrl })); } return(Page()); }
/// <summary> /// Verifies the user if key is correct. /// </summary> /// <param name="userVerificationInfo">User verification information</param> /// <returns>true,if user is verified,and false otherwise</returns> public bool Verify(UserVerificationInfo userVerificationInfo) { // trying to verify user var result = (int)this._dataManager.Operate <UserVerificationInfo, object>("VerifyUser", userVerificationInfo); // if user verification fails return false if (result == 0) { return(false); } // return true return(true); }
/// <summary> /// Verifies user /// </summary> /// <param name="userVerificationInfo">User verification information</param> /// <returns>response</returns> public async Task <Response <HttpResponseMessage> > VerifyAsync(UserVerificationInfo userVerificationInfo) { // getting response var response = await this._registerClient.PutAsync("api/register/verify", this.ConstructContent(userVerificationInfo)); if (!response.IsSuccessStatusCode) { return(this.ConstructResponse(Status.Error, response)); } // reading content var content = await response.Content.ReadAsStringAsync(); // returning response return(this.ConstructResponse(Status.Ok, response)); }
/// <summary> /// Adds verification info to database /// </summary> /// <param name="id">Id</param> /// <param name="mail">Mail address to which verification key must be sent.</param> public void AddVerificationInfo(string username, string mail) { // generating key var key = this.GenerateVerifyKey(32); // constructing verification info var verificationInfo = new UserVerificationInfo { Username = username, VerifyKey = key }; // adding verification key this._dataManager.Operate <UserVerificationInfo, object>("AddVerificationKey", verificationInfo); // sending verifiaction key to mail this._mailService.Send(mail, key); }