예제 #1
0
        public IActionResult Login([FromForm] UserLoginDTO user)
        {
            if (!_reCaptcha.Validate(user.ReCaptchaToken))
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Invalid ReCaptcha." }
                }));
            }

            var userCtx = _context.Users.SingleOrDefault(x => x.UserName == user.UserName);

            if (userCtx == null)
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Invalid UserName or Password." }
                }));
            }

            if (!_userLogin.VerifyPassword(user.Password, userCtx.Salt, userCtx.Hash))
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Invalid UserName or Password." }
                }));
            }

            return(Ok(new Status {
                Success = true, Token = _userLogin.Authenticate(userCtx)
            }));
        }
        public async Task <IActionResult> CreateUser([FromForm] UserRegistrationDTO userRegistrationRequest)
        {
            if (!_reCaptcha.Validate(userRegistrationRequest.ReCaptchaToken))
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Invalid ReCaptcha." }
                }));
            }

            var userRegistration = _userRegistration.TrimFields(userRegistrationRequest);

            if (!ModelState.IsValid)
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Fields missing." }
                }));
            }

            if (_userRegistration.CheckWhitespace(userRegistration))
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Fields can't have whitespace." }
                }));
            }


            if (_context.Users.Any(x => x.UserName == userRegistration.UserName))
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Username already exists." }
                }));
            }

            if (_context.Users.Any(x => x.Email == userRegistration.Email))
            {
                return(Ok(new Status {
                    Success = false, Errors = new[] { "Email already exists." }
                }));
            }

            var hashedUser = _userRegistration.HashPassword(userRegistration);

            _context.Users.Add(hashedUser);
            await _context.SaveChangesAsync();

            return(Ok(new Status {
                Success = true
            }));
        }