88 lines
3.3 KiB
PHP
88 lines
3.3 KiB
PHP
<?php
|
|
namespace App\Filters;
|
|
|
|
use CodeIgniter\Filters\FilterInterface;
|
|
use CodeIgniter\HTTP\RequestInterface;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
|
|
use App\Helpers\ClientTokenHelper;
|
|
use App\Models\ClientApiModel;
|
|
use CodeIgniter\API\ResponseTrait;
|
|
|
|
class AuthClientApi implements FilterInterface
|
|
{
|
|
use ResponseTrait;
|
|
protected $clientAPI;
|
|
protected $myLogger;
|
|
public function __construct()
|
|
{
|
|
set_session_context('External API Filter');
|
|
$this->clientAPI = new ClientApiModel();
|
|
$this->myLogger = \Config\Services::mylogger();
|
|
|
|
}
|
|
public function before(RequestInterface $request, $arguments = null)
|
|
{
|
|
$response = service('response');
|
|
try {
|
|
|
|
$authHeader = $request->getHeaderLine('Authorization');
|
|
|
|
// Check if header exists
|
|
if (empty($authHeader)) {
|
|
$this->myLogger->log('error', 'Authorization header missing');
|
|
return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Authorization header missing','code'=> 401]], 401);
|
|
}
|
|
|
|
if(!str_contains($authHeader, 'Bearer ')){
|
|
$this->myLogger->log('error', 'Authorization Bearer missing');
|
|
return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Invalid Authorization header','code'=>401]], 401);
|
|
}
|
|
|
|
$token = str_replace('Bearer ', '', $authHeader);
|
|
if (empty($token)) {
|
|
|
|
$this->myLogger->log('error', 'Empty Token');
|
|
return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Invalid Token Format','code'=> 401]], 401);
|
|
}
|
|
|
|
try{
|
|
|
|
$client_id = ClientTokenHelper::extractClientId($token);
|
|
|
|
}catch(\Exception $e){
|
|
|
|
$this->myLogger->log('error', 'Invalid Client Token Format');
|
|
|
|
return $response->setJson(['status' => "Failure", 'error' => 'Invalid Token Format'], 401);
|
|
}
|
|
$client = $this->clientAPI->where('client_id', $client_id)->where("is_active", 1)->where("api_access", 1)->first();
|
|
|
|
// Client validation
|
|
if (!$client) {
|
|
$this->myLogger->log('error', 'Client Not Found or Unauthorized');
|
|
return $response->setJson(['status' => "Failure", 'error' => ['message' => 'Client not found or unauthorized','code'=>'403']], 403);
|
|
}
|
|
|
|
if (hash_equals($client['client_token'], $token)) {
|
|
$this->myLogger->log('error', 'Access Granted For Client : '.$client_id);
|
|
return true;
|
|
} else {
|
|
$this->myLogger->log('error', 'Invalid Token given for client : '.$client_id);
|
|
return $response->setJson(['status' => "Failure", 'error' => ['message' => 'Invalid token','code'=>401]
|
|
], 401);
|
|
}
|
|
} catch (\Exception $e) {
|
|
log_message('error', 'Error in ClientAPIController:validateToken - ' . $e->getMessage());
|
|
return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Internal Server Error','code'=> 500]], 500);
|
|
}
|
|
|
|
}
|
|
|
|
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
|
|
{
|
|
// Do something here
|
|
}
|
|
}
|
|
|