52 lines
2.7 KiB
PHP
Executable File
52 lines
2.7 KiB
PHP
Executable File
<?php
|
|
namespace Zampet\Module\Auth\v0\Middlewares;
|
|
|
|
use Exception;
|
|
use Zampet\Services\JWTService;
|
|
use Zampet\Module\Auth\v0\Services\AuthService;
|
|
|
|
class AuthMiddleware {
|
|
/**
|
|
* Gerencia o processo de autenticação de uma requisição de API via token Bearer.
|
|
*
|
|
* Este método estático atua como um **middleware de autenticação**, verificando a presença e a validade de um token JWT em uma requisição HTTP.
|
|
*
|
|
* #### Fluxo de Operação:
|
|
* 1. **Obtenção do Token:** Tenta extrair o token Bearer do cabeçalho da requisição usando `JWTService::getBearerToken()`.
|
|
* 2. **Verificação de Presença:** Se o token não for encontrado, uma `Exception` é lançada com o código `401 Unauthorized`.
|
|
* 3. **Validação do Token:** Chama `AuthService::validateToken()` para verificar a validade do token (assinatura, expiração e status no banco de dados).
|
|
* 4. **Conclusão:**
|
|
* * Se a validação for bem-sucedida, o método retorna `true`, permitindo que o processamento da rota continue.
|
|
*
|
|
* #### Tratamento de Erros:
|
|
* - Qualquer `Exception` lançada durante o processo (token ausente, falha de validação JWT, token expirado) é capturada.
|
|
* - O método retorna um array de erro formatado, contendo o código HTTP e a mensagem de erro da exceção, o que é útil para a camada de controle enviar uma resposta JSON padronizada ao cliente.
|
|
*
|
|
* @return array|bool Retorna `true` se o token for válido; caso contrário, retorna um array associativo com o status da operação, o código de resposta HTTP e uma mensagem de erro.
|
|
*/
|
|
public static function handle(): array|bool {
|
|
// Recebe o token JWT do cabeçalho Authorization
|
|
$bearerToken = JWTService::getBearerToken();
|
|
|
|
try {
|
|
// Verifica se o token está presente
|
|
if (!$bearerToken) {
|
|
throw new Exception(message: "Token not provided", code: 401);
|
|
}
|
|
|
|
// Verifica se o token é válido
|
|
$validateTokenService = (new AuthService())->validateToken(token: $bearerToken);
|
|
if ($validateTokenService['status'] !== 'success') {
|
|
throw new Exception(message: $validateTokenService['message'], code: 401);
|
|
}
|
|
|
|
return true;
|
|
} catch(Exception $e) {
|
|
return [
|
|
'response_code' => $e->getCode(),
|
|
'status' => 'error',
|
|
'message' => $e->getMessage()
|
|
];
|
|
}
|
|
}
|
|
} |