Ejemplo n.º 1
0
        public async Task <AuthenticationResult> Login(string login, string password)
        {
            var user = await userRepository.GetUser(login);

            if (user == null)
            {
                throw new InvalidCredentialsException("Invalid credentials");
            }

            string salt = user.Salt;
            string hash = encrypter.GetHash(password, salt);

            if (user.Password != hash)
            {
                throw new InvalidCredentialsException("Invalid credentials");
            }

            var loggedUser = await loggedUserRepository.GetLoggedUser(user.UserId);

            if (loggedUser != null)
            {
                throw new AlreadyExistException($"User {user.Login} is already logged on");
            }

            var authResult = jwtService.CreateToken(user.Login, user.Role.ToString());

            var refreshToken = new LoggedUser
            {
                RefreshToken = Guid.NewGuid(),
                JwtId        = authResult.JwtId,
                CreationDate = DateTime.Now,
                ExpiryDate   = DateTime.Now.AddDays(7),
                UserId       = user.UserId
            };

            await loggedUserRepository.AddLoggedUser(refreshToken);

            await loggedUserRepository.SaveChanges();

            authResult.RefreshToken = refreshToken.RefreshToken;
            return(authResult);
        }
        public ActionResult <BaseResult <User> > GetLogged()
        {
            var user = _loggedUserRepository.GetLoggedUser();

            return(Ok(user));
        }