forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
8 months ago
|
<?php
|
||
|
|
||
|
namespace app\traits;
|
||
|
|
||
|
use app\models\Token;
|
||
|
use Slim\Psr7\Request;
|
||
|
use Exception;
|
||
|
use DateTime;
|
||
|
|
||
|
trait AuthToken
|
||
|
{
|
||
|
public function findToken(Request $request)
|
||
|
{
|
||
|
$body = json_decode($request->getBody()->getContents(), true);
|
||
|
$headers = $request->getHeader('Authorization');
|
||
|
$bearerToken = str_replace('Bearer ', '', $headers[0]);
|
||
|
|
||
|
if (empty($bearerToken)) {
|
||
|
throw new Exception('Informe o token.');
|
||
|
}
|
||
|
|
||
|
if (empty($body['org_id'])) {
|
||
|
throw new Exception('Informe o org_id.');
|
||
|
}
|
||
|
|
||
|
$tokenEmpresa = Token::query(
|
||
|
"SELECT pu.id as user_id, t.id as token_id, pou.id_organizacao, t.token, t.expired_at
|
||
|
FROM pbx_usuarios pu
|
||
|
INNER JOIN pbx_tokens t ON t.id_usuario = pu.id
|
||
|
INNER JOIN pbx_organizacao_usuarios pou ON pou.id_usuario = pu.id
|
||
|
WHERE t.token = :token AND id_organizacao = :org_id;",
|
||
|
["token" => $bearerToken, 'org_id' => $body['org_id']]
|
||
|
);
|
||
|
|
||
|
if (empty($tokenEmpresa)) {
|
||
|
throw new Exception('Requisicao nao autorizada, por favor verifique o token e a permissao de acesso!');
|
||
|
}
|
||
|
|
||
|
$expiredDate = new DateTime($tokenEmpresa[0]->expired_at);
|
||
|
$now = new DateTime();
|
||
|
if ($expiredDate < $now) {
|
||
|
throw new Exception('Token expirado, realize uma nova autenticacao.');
|
||
|
}
|
||
|
return $tokenEmpresa;
|
||
|
}
|
||
|
}
|