Advertisement
Haotik

Untitled

Nov 15th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. namespace app\controllers;
  5.  
  6. use Firebase\JWT\BeforeValidException;
  7. use Firebase\JWT\ExpiredException;
  8. use Firebase\JWT\JWT;
  9. use Firebase\JWT\SignatureInvalidException;
  10. use yii\rest\Controller;
  11. use app\models\Users;
  12.  
  13. class ApiBaseController extends Controller
  14. {
  15. public $modelClass = 'app\models\Users';
  16.  
  17. public function actions()
  18. {
  19. $actions = parent::actions();
  20. unset($actions['update'], $actions['create'], $actions['delete']);
  21. return $actions;
  22. }
  23.  
  24. public function behaviors()
  25. {
  26. return [
  27. [
  28. 'class' => \yii\filters\ContentNegotiator::class,
  29. 'formatParam' => '_format',
  30. 'formats' => [
  31. 'application/json' => \yii\web\Response::FORMAT_JSON,
  32. 'xml'=>\yii\web\Response::FORMAT_XML,
  33. ]
  34. ],
  35. ];
  36. }
  37.  
  38. public function checkToken(){
  39. $jwt = new JWT();
  40. // $req = Yii::$app->request->headers->get('token');
  41. // $req = Yii::$app->request->get('token');
  42. $req = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxYjUxYWEyOS1hYTA5LTRmOTgtOWJkYS0zMjJmODMzNTU3M2UiLCJ1c2VySWQiOiJlMDZlZDEyYS00OTYzLTQ1MTMtOGE4My00MmVlNTMxYTQyZjUiLCJlbWFpbCI6Ikhhb3RpazJAdGVzdC5qd3QiLCJyb2xlIjoiVXNlciIsIm5iZiI6MTU3MzgwMTY5OSwiZXhwIjoxNTczODAyNTk5LCJpYXQiOjE1NzM4MDE2OTl9.A_KDbu6wfoAqGiQulFUaR7UYqU82K0UCyD0gq0dzUrY';
  43.  
  44. $key = 'dktlb74jfvmtu3od8rhvn453bdey3a23';
  45.  
  46. $token = str_replace('Bearer ', '', $req);
  47. $tokenarray = explode('.', $token);
  48. list($headb64, $bodyb64, $cryptob64) = $tokenarray;
  49.  
  50. $sig = JWT::urlsafeB64Decode($cryptob64);
  51. $verifity = static::verify("$headb64.$bodyb64", $sig, $key,'HS256');
  52.  
  53.  
  54. if ($verifity) {
  55. $info = JWT::decode($token, $key, array('HS256')); // декодируем токен
  56. if (is_string($info)) return $info;
  57. if ((isset($info->role)) AND ($info->role != 'User')) return true; //проверка роли
  58. else return false;
  59. }
  60. }
  61.  
  62. private static function verify($msg, $signature, $key, $alg)
  63. {
  64. if (empty(JWT::$supported_algs[$alg])) {
  65. throw new DomainException('Algorithm not supported');
  66. }
  67.  
  68. list($function, $algorithm) = JWT::$supported_algs[$alg];
  69.  
  70. switch($function) {
  71. case 'openssl':
  72. $success = openssl_verify($msg, $signature, $key, $algorithm);
  73. if ($success === 1) {
  74. return true;
  75. } elseif ($success === 0) {
  76. return false;
  77. }
  78. // returns 1 on success, 0 on failure, -1 on error.
  79. throw new DomainException(
  80. 'OpenSSL error: ' . openssl_error_string()
  81. );
  82.  
  83. case 'hash_hmac':
  84. default:
  85. $hash = hash_hmac($algorithm, $msg, $key, true);
  86. if (function_exists('hash_equals')) {
  87. // return $hash;
  88. return hash_equals($signature, $hash);
  89. }
  90.  
  91. $len = min(static::safeStrlen($signature), static::safeStrlen($hash));
  92.  
  93. $status = 0;
  94. for ($i = 0; $i < $len; $i++) {
  95. $status |= (ord($signature[$i]) ^ ord($hash[$i]));
  96. }
  97. $status |= (static::safeStrlen($signature) ^ static::safeStrlen($hash));
  98.  
  99. return ($status===0);
  100. }
  101. }
  102.  
  103. private static function safeStrlen($str)
  104. {
  105. if (function_exists('mb_strlen')) {
  106. return mb_strlen($str, '8bit');
  107. }
  108. return strlen($str);
  109. }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement