public async Task <IActionResult> VerificationEmail([FromBody] VerificationEmailModel model) { if (!ModelState.IsValid) { return(BadRequest()); } var regex = new Regex(@"^(([^<>()\[\]\\.,;:\s@""]+(\.[^<>()\[\]\\.,;:\s@""]+)*)|("".+""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"); if (!regex.IsMatch(model.Email)) { return(Ok(new { code = "1002", result = false })); } try { var user = await _userRepository.FindUser(model.PhoneNumber); if (user == null) { return(BadRequest()); } if (!user.VerificationCode.Equals(model.VerificationCode)) { return(BadRequest()); } await _userRepository.RegisterEmail(model.Email, user); var token = await _tokenProvider.GenerateAsync(model.PhoneNumber); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { phone = model.PhoneNumber, token }, HttpContext.Request.Scheme); await _emailSender.SendEmailAsync(model.Email, "Guapcoin Support Service", "Please confirm your account by clicking this link: " + callbackUrl); } catch (Exception e) { Debug.WriteLine($"--- Error: {e.StackTrace}"); return(BadRequest()); } return(Ok(new { result = true })); }
public async Task <IActionResult> VerifyEmail([FromBody] VerificationEmailModel VerificationEmailData) { JObject responseObject = new JObject(); VerificationEmailModel model = _context.Registrations.Where(x => x.Token == VerificationEmailData.Token && x.Email == VerificationEmailData.Email).FirstOrDefault(); try { if (model == null) { responseObject.Add("message", JToken.FromObject("false")); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.InternalServerError)); } responseObject.Add("message", JToken.FromObject("true")); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.OK)); } catch (Exception ex) { responseObject.Add("message", JToken.FromObject("false")); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.InternalServerError)); } }
public async Task <IActionResult> RegisterUserAsync([FromBody] RegisterUserModel RegisterUserModelDTO) { JObject responseObject = new JObject(); try { if (RegisterUserModelDTO == null) { responseObject.Add("message", JToken.FromObject("Register request body cannot be null!")); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.BadRequest)); } if (!ModelState.IsValid) { string modelErrorMessage = string.Join(" | ", ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage)); responseObject.Add("message", JToken.FromObject(modelErrorMessage)); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.BadRequest)); } ApplicationUser newUser = new ApplicationUser { UserName = RegisterUserModelDTO.UserName, Email = RegisterUserModelDTO.Email, FirstName = RegisterUserModelDTO.FirstName, LastName = RegisterUserModelDTO.LastName, Age = RegisterUserModelDTO.Age }; //Set password options _userManager.Options.Password = new PasswordOptions { RequireDigit = true, RequiredLength = 8, RequireNonAlphanumeric = false, RequireUppercase = false, RequireLowercase = true, RequiredUniqueChars = 6 }; _userManager.Options.User.RequireUniqueEmail = true; IdentityResult result = await _userManager.CreateAsync(newUser, RegisterUserModelDTO.Password); if (result.Succeeded) { await _signInManager.SignInAsync(newUser, false); await _userManager.AddToRoleAsync(newUser, "User"); string jwtSecurityToken = await GenerateJwtToken(newUser); responseObject.Add("access_token", JToken.FromObject(jwtSecurityToken)); responseObject.Add("expires", JToken.FromObject(30)); responseObject.Add("email", JToken.FromObject(newUser.Email)); bool emailResult = new EmailHandling().SendVerificationEmail(newUser.Email, jwtSecurityToken).GetAwaiter().GetResult(); VerificationEmailModel verificationEmailModel = new VerificationEmailModel { RegisterId = Guid.NewGuid(), Email = newUser.Email, Token = jwtSecurityToken }; await _context.Registrations.AddAsync(verificationEmailModel); await _context.SaveChangesAsync(); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.Created)); } else { string modelCreationErrors = string.Join(string.Empty, result.Errors.SelectMany(x => x.Description)); responseObject.Add("message", JToken.FromObject($"User creation failed because of:\n{modelCreationErrors}")); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.BadRequest)); } } catch (Exception ex) { responseObject.Add("message", JToken.FromObject(ex.Message)); return(UtilityExtensions.ReturnResponse(responseObject, HttpStatusCode.InternalServerError)); } }