monitoring-api/packages/v1/administrativo/services/user/user_authenticate_service.py
2025-10-06 09:30:41 -03:00

52 lines
2.1 KiB
Python

from fastapi import HTTPException, status
from actions.jwt.create_token import CreateToken
from packages.v1.administrativo.schemas.user_schema import UserAuthenticateSchema
from packages.v1.administrativo.actions.user.user_get_by_authenticate_action import GetByAuthenticateAction
import json
from actions.security.security import Security
class AuthenticateService:
def execute(self, user_authenticate_schema: UserAuthenticateSchema):
# Instância da action de autenticação
get_by_authenticate_action = GetByAuthenticateAction()
get_by_authenticate_result = get_by_authenticate_action.execute(user_authenticate_schema)
# Verifica se o usuário existe
if not get_by_authenticate_result:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Usuário não encontrado ou credenciais inválidas"
)
# Verifica se a senha armazenada é um hash válido
if not Security.is_hash(get_by_authenticate_result.password):
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail="A senha armazenada é inválida"
)
# Verifica se a senha informada confere
if not Security.verify_password(user_authenticate_schema.password, get_by_authenticate_result.password):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Senha incorreta"
)
# Verifica se o usuário está ativo
if get_by_authenticate_result.status != "A":
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="O usuário encontra-se desativado"
)
# Gera o token de acesso
create_token = CreateToken()
jwtUser = {
"user_id": int(get_by_authenticate_result.user_id),
"nome": str(get_by_authenticate_result.name),
"email": str(get_by_authenticate_result.email),
}
return create_token.execute("access-token", json.dumps(jwtUser))