public async Task <ActionResult <Token> > Register(RegisterUser newUser)
        {
            newUser.Email = newUser.Email.ToLower();
            var emailExist = await _context.Users.Where(u => u.Email == newUser.Email).FirstOrDefaultAsync();

            if (emailExist != null)
            {
                return(BadRequest(new { ErrorMessage = "That email is already taken" }));
            }

            var user = new User
            {
                FirstName    = newUser.FirstName,
                LastName     = newUser.LastName,
                Email        = newUser.Email,
                PasswordHash = HashPassword(newUser.Password, BcryptWorkfactor)
            };

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

            var jwtToken = new Token();

            jwtToken.JWT = JWTUtilities.GenerateToken(user.FirstName, user.LastName, user.Email, user.UserId);
            return(Ok(new { user = user.UserId, token = jwtToken }));
        }
        public async Task <ActionResult <Token> > Login(LoginUser login)
        {
            login.Email = login.Email.ToLower();
            var user = await _context.Users.Where(u => u.Email == login.Email).FirstOrDefaultAsync();

            if (user != null)
            {
                var validPassword = Verify(login.Password, user.PasswordHash);
                if (validPassword)
                {
                    return(new Token()
                    {
                        JWT = JWTUtilities.GenerateToken(user.FirstName, user.LastName, user.Email, user.UserId)
                    });
                }
            }
            ModelState.AddModelError(string.Empty, "Wrong email or password");
            return(BadRequest(ModelState));
        }