chore: initial commit
This commit is contained in:
186
api/libraries/Authorization_Token.php
Normal file
186
api/libraries/Authorization_Token.php
Normal file
@@ -0,0 +1,186 @@
|
||||
<?php defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Authorization_Token
|
||||
* ----------------------------------------------------------
|
||||
* API Token Generate/Validation
|
||||
*
|
||||
*/
|
||||
require_once __DIR__.'/../vendor/autoload.php';
|
||||
use Firebase\JWT\JWT as api_JWT;
|
||||
use Firebase\JWT\Key as api_Key;
|
||||
#[\AllowDynamicProperties]
|
||||
class Authorization_Token
|
||||
{
|
||||
/**
|
||||
* Token Key
|
||||
*/
|
||||
protected $token_key;
|
||||
|
||||
/**
|
||||
* Token algorithm
|
||||
*/
|
||||
protected $token_algorithm;
|
||||
|
||||
/**
|
||||
* Token Request Header Name
|
||||
*/
|
||||
protected $token_header;
|
||||
|
||||
/**
|
||||
* Token Expire Time
|
||||
* ------------------
|
||||
* (1 day) : 60 * 60 * 24 = 86400
|
||||
* (1 hour) : 60 * 60 = 3600
|
||||
*/
|
||||
protected $token_expire_time = 315569260;
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->CI =& get_instance();
|
||||
|
||||
/**
|
||||
* jwt config file load
|
||||
*/
|
||||
$this->CI->load->config('jwt');
|
||||
|
||||
/**
|
||||
* Load Config Items Values
|
||||
*/
|
||||
$this->token_key = $this->CI->config->item('jwt_key');
|
||||
$this->token_algorithm = $this->CI->config->item('jwt_algorithm');
|
||||
$this->token_header = $this->CI->config->item('token_header');
|
||||
$this->token_expire_time = $this->CI->config->item('token_expire_time');
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate Token
|
||||
* @param: {array} data
|
||||
*/
|
||||
public function generateToken($data = null)
|
||||
{
|
||||
if ($data AND is_array($data))
|
||||
{
|
||||
// add api time key in user array()
|
||||
$data['API_TIME'] = time();
|
||||
|
||||
try {
|
||||
return api_JWT::encode($data, $this->token_key, $this->token_algorithm);
|
||||
}
|
||||
catch(Exception $e) {
|
||||
return 'Message: ' .$e->getMessage();
|
||||
}
|
||||
} else {
|
||||
return "Token Data Undefined!";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function get_token()
|
||||
{
|
||||
/**
|
||||
* Request All Headers
|
||||
*/
|
||||
$headers = $this->CI->input->request_headers();
|
||||
|
||||
/**
|
||||
* Authorization Header Exists
|
||||
*/
|
||||
return $this->token($headers);
|
||||
}
|
||||
/**
|
||||
* Validate Token with Header
|
||||
* @return : user informations
|
||||
*/
|
||||
public function validateToken()
|
||||
{
|
||||
/**
|
||||
* Request All Headers
|
||||
*/
|
||||
$headers = $this->CI->input->request_headers();
|
||||
|
||||
/**
|
||||
* Authorization Header Exists
|
||||
*/
|
||||
$token_data = $this->tokenIsExist($headers);
|
||||
if($token_data['status'] === TRUE)
|
||||
{
|
||||
try
|
||||
{
|
||||
/**
|
||||
* Token Decode
|
||||
*/
|
||||
try {
|
||||
$token_decode = api_JWT::decode($token_data['token'], new api_Key($this->token_key, $this->token_algorithm));
|
||||
}
|
||||
catch(Exception $e) {
|
||||
return ['status' => FALSE, 'message' => $e->getMessage()];
|
||||
}
|
||||
|
||||
if(!empty($token_decode) AND is_object($token_decode))
|
||||
{
|
||||
// Check Token API Time [API_TIME]
|
||||
if (empty($token_decode->API_TIME OR !is_numeric($token_decode->API_TIME))) {
|
||||
|
||||
return ['status' => FALSE, 'message' => 'Token Time Not Define!'];
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* Check Token Time Valid
|
||||
*/
|
||||
$time_difference = strtotime('now') - $token_decode->API_TIME;
|
||||
if( $time_difference >= $this->token_expire_time )
|
||||
{
|
||||
return ['status' => FALSE, 'message' => 'Token Time Expire.'];
|
||||
|
||||
}else
|
||||
{
|
||||
/**
|
||||
* All Validation False Return Data
|
||||
*/
|
||||
return ['status' => TRUE, 'data' => $token_decode];
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
return ['status' => FALSE, 'message' => 'Forbidden'];
|
||||
}
|
||||
}
|
||||
catch(Exception $e) {
|
||||
return ['status' => FALSE, 'message' => $e->getMessage()];
|
||||
}
|
||||
}else
|
||||
{
|
||||
// Authorization Header Not Found!
|
||||
return ['status' => FALSE, 'message' => $token_data['message'] ];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Token Header Check
|
||||
* @param: request headers
|
||||
*/
|
||||
private function tokenIsExist($headers)
|
||||
{
|
||||
if(!empty($headers) AND is_array($headers)) {
|
||||
foreach ($headers as $header_name => $header_value) {
|
||||
if (strtolower(trim($header_name)) == strtolower(trim($this->token_header)) && $header_value)
|
||||
return ['status' => TRUE, 'token' => $header_value];
|
||||
}
|
||||
}
|
||||
return ['status' => FALSE, 'message' => 'Token is not defined.'];
|
||||
}
|
||||
|
||||
private function token($headers)
|
||||
{
|
||||
if(!empty($headers) AND is_array($headers)) {
|
||||
foreach ($headers as $header_name => $header_value) {
|
||||
if (strtolower(trim($header_name)) == strtolower(trim($this->token_header)))
|
||||
return $header_value;
|
||||
}
|
||||
}
|
||||
return 'Token is not defined.';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user