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