52 lines
2.1 KiB
Python
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))
|