Exemplo n.º 1
0
        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));
            }
        }