PABX da Simples IP
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

<?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;
}
}