%PDF- %PDF-
Direktori : /var/www/html/news/vendor/tymon/jwt-auth/src/ |
Current File : //var/www/html/news/vendor/tymon/jwt-auth/src/JWTManager.php |
<?php /* * This file is part of jwt-auth. * * (c) Sean Tymon <tymon148@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Tymon\JWTAuth; use Tymon\JWTAuth\Exceptions\JWTException; use Tymon\JWTAuth\Providers\JWT\JWTInterface; use Tymon\JWTAuth\Exceptions\TokenBlacklistedException; class JWTManager { /** * @var \Tymon\JWTAuth\Providers\JWT\JWTInterface */ protected $jwt; /** * @var \Tymon\JWTAuth\Blacklist */ protected $blacklist; /** * @var \Tymon\JWTAuth\PayloadFactory */ protected $payloadFactory; /** * @var bool */ protected $blacklistEnabled = true; /** * @var bool */ protected $refreshFlow = false; /** * @param \Tymon\JWTAuth\Providers\JWT\JWTInterface $jwt * @param \Tymon\JWTAuth\Blacklist $blacklist * @param \Tymon\JWTAuth\PayloadFactory $payloadFactory */ public function __construct(JWTInterface $jwt, Blacklist $blacklist, PayloadFactory $payloadFactory) { $this->jwt = $jwt; $this->blacklist = $blacklist; $this->payloadFactory = $payloadFactory; } /** * Encode a Payload and return the Token. * * @param \Tymon\JWTAuth\Payload $payload * @return \Tymon\JWTAuth\Token */ public function encode(Payload $payload) { $token = $this->jwt->encode($payload->get()); return new Token($token); } /** * Decode a Token and return the Payload. * * @param \Tymon\JWTAuth\Token $token * @return Payload * @throws TokenBlacklistedException */ public function decode(Token $token) { $payloadArray = $this->jwt->decode($token->get()); $payload = $this->payloadFactory->setRefreshFlow($this->refreshFlow)->make($payloadArray); if ($this->blacklistEnabled && $this->blacklist->has($payload)) { throw new TokenBlacklistedException('The token has been blacklisted'); } return $payload; } /** * Refresh a Token and return a new Token. * * @param \Tymon\JWTAuth\Token $token * @return \Tymon\JWTAuth\Token */ public function refresh(Token $token) { $payload = $this->setRefreshFlow()->decode($token); if ($this->blacklistEnabled) { // invalidate old token $this->blacklist->add($payload); } // return the new token return $this->encode( $this->payloadFactory->make([ 'sub' => $payload['sub'], 'iat' => $payload['iat'], ]) ); } /** * Invalidate a Token by adding it to the blacklist. * * @param Token $token * @return bool */ public function invalidate(Token $token) { if (! $this->blacklistEnabled) { throw new JWTException('You must have the blacklist enabled to invalidate a token.'); } return $this->blacklist->add($this->decode($token)); } /** * Get the PayloadFactory instance. * * @return \Tymon\JWTAuth\PayloadFactory */ public function getPayloadFactory() { return $this->payloadFactory; } /** * Get the JWTProvider instance. * * @return \Tymon\JWTAuth\Providers\JWT\JWTInterface */ public function getJWTProvider() { return $this->jwt; } /** * Get the Blacklist instance. * * @return \Tymon\JWTAuth\Blacklist */ public function getBlacklist() { return $this->blacklist; } /** * Set whether the blacklist is enabled. * * @param bool $enabled */ public function setBlacklistEnabled($enabled) { $this->blacklistEnabled = $enabled; return $this; } /** * Set the refresh flow. * * @param bool $refreshFlow * @return $this */ public function setRefreshFlow($refreshFlow = true) { $this->refreshFlow = $refreshFlow; return $this; } }