Source code for sagace.auth.interfaces.authentication_service
"""
--------------------------------------------------------------------------------------------------------------------
Descrição:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Este módulo fornece um serviço de autenticação para facilitar o uso do sistema SAGACE.
A classe `AuthenticationService` encapsula a lógica de autenticação, delegando o processo
para a classe de caso de uso `AuthenticateUser`, que por sua vez utiliza `AuthenticationAPI`.
Principais funcionalidades:
- Abstrai a autenticação de usuários, simplificando a interface.
- Delegação do fluxo de autenticação conforme o princípio **Single Responsibility** (S - SOLID).
- Facilita a reutilização da lógica de autenticação em diferentes partes do sistema.
Classes:
- ``AuthenticationService``: Serviço de autenticação de usuários.
Exemplo de uso:
.. code-block:: python
from sagace.application import AuthenticationService
from sagace.core import TokenStorage
service = AuthenticationService()
token_storage = TokenStorage()
token = service.login("https://api.sagace.online", "usuario", "senha", "app_token", token_storage)
print(token)
Autor: Diego Yosiura
Última Atualização: 27/02/2025 15:32
Criado em: 27/02/2025 15:32
Copyright: (c) Ampere Consultoria Ltda
Projeto Original: sagace-v2-package
IDE: PyCharm
"""
from ..infrastructure.authentication_api import AuthenticationAPI
from ..application import AuthenticateUser
from ...core import TokenStorage
[docs]
class AuthenticationService:
"""
Serviço de autenticação para facilitar o uso do sistema.
Esta classe abstrai a autenticação de usuários, centralizando o fluxo em `AuthenticateUser`.
Segue o princípio **Dependency Inversion (D - SOLID)**, garantindo que a implementação de
autenticação possa ser alterada sem impactar os consumidores do serviço.
"""
def __init__(self):
"""
Inicializa o serviço de autenticação.
O repositório de autenticação `AuthenticationAPI` é injetado na instância de `AuthenticateUser`,
garantindo que qualquer mudança na lógica de autenticação possa ser realizada de forma desacoplada.
Princípios aplicados:
- **Dependency Inversion (D - SOLID)**: A classe depende de uma abstração, permitindo substituição.
- **Single Responsibility (S - SOLID)**: Centraliza a autenticação sem lidar com detalhes internos da API.
"""
self.use_case = AuthenticateUser(auth_repository=AuthenticationAPI())
[docs]
def login(self, base_url: str, username: str, password: str, application_token: str,
token_storage: TokenStorage) -> str:
"""
Realiza login e retorna o token JWT.
:param base_url: URL base da API de autenticação.
:type base_url: str
:param username: Nome de usuário para autenticação.
:type username: str
:param password: Senha do usuário.
:type password: str
:param application_token: Token da aplicação para autenticação.
:type application_token: str
:param token_storage: Instância responsável por armazenar o token JWT.
:type token_storage: TokenStorage
:return: Token de autenticação JWT.
:rtype: str
"""
# Chama a camada de aplicação para realizar a autenticação
token = self.use_case.execute(base_url, username, password, application_token, token_storage)
# Retorna apenas o token de acesso
return token.access_token