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.
46 lines
1.4 KiB
46 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; |
|
} |
|
}
|
|
|