176 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			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\Claims\Claim;
 | |
| use Tymon\JWTAuth\Exceptions\PayloadException;
 | |
| use Tymon\JWTAuth\Validators\PayloadValidator;
 | |
| 
 | |
| class Payload implements \ArrayAccess
 | |
| {
 | |
|     /**
 | |
|      * The array of claims.
 | |
|      *
 | |
|      * @var \Tymon\JWTAuth\Claims\Claim[]
 | |
|      */
 | |
|     private $claims = [];
 | |
| 
 | |
|     /**
 | |
|      * Build the Payload.
 | |
|      *
 | |
|      * @param array  $claims
 | |
|      * @param \Tymon\JWTAuth\Validators\PayloadValidator  $validator
 | |
|      * @param bool   $refreshFlow
 | |
|      */
 | |
|     public function __construct(array $claims, PayloadValidator $validator, $refreshFlow = false)
 | |
|     {
 | |
|         $this->claims = $claims;
 | |
| 
 | |
|         $validator->setRefreshFlow($refreshFlow)->check($this->toArray());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the array of claim instances.
 | |
|      *
 | |
|      * @return \Tymon\JWTAuth\Claims\Claim[]
 | |
|      */
 | |
|     public function getClaims()
 | |
|     {
 | |
|         return $this->claims;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the array of claims.
 | |
|      *
 | |
|      * @return array
 | |
|      */
 | |
|     public function toArray()
 | |
|     {
 | |
|         $results = [];
 | |
|         foreach ($this->claims as $claim) {
 | |
|             $results[$claim->getName()] = $claim->getValue();
 | |
|         }
 | |
| 
 | |
|         return $results;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the payload.
 | |
|      *
 | |
|      * @param  string  $claim
 | |
|      * @return mixed
 | |
|      */
 | |
|     public function get($claim = null)
 | |
|     {
 | |
|         if (! is_null($claim)) {
 | |
|             if (is_array($claim)) {
 | |
|                 return array_map([$this, 'get'], $claim);
 | |
|             }
 | |
| 
 | |
|             return array_get($this->toArray(), $claim, false);
 | |
|         }
 | |
| 
 | |
|         return $this->toArray();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Determine whether the payload has the claim.
 | |
|      *
 | |
|      * @param  \Tymon\JWTAuth\Claims\Claim  $claim
 | |
|      * @return bool
 | |
|      */
 | |
|     public function has(Claim $claim)
 | |
|     {
 | |
|         return in_array($claim, $this->claims);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the payload as a string.
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function __toString()
 | |
|     {
 | |
|         return json_encode($this->toArray());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Determine if an item exists at an offset.
 | |
|      *
 | |
|      * @param  mixed  $key
 | |
|      * @return bool
 | |
|      */
 | |
|     public function offsetExists($key)
 | |
|     {
 | |
|         return array_key_exists($key, $this->toArray());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get an item at a given offset.
 | |
|      *
 | |
|      * @param  mixed  $key
 | |
|      * @return mixed
 | |
|      */
 | |
|     public function offsetGet($key)
 | |
|     {
 | |
|         return array_get($this->toArray(), $key, []);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Don't allow changing the payload as it should be immutable.
 | |
|      *
 | |
|      * @param  mixed $key
 | |
|      * @param  mixed $value
 | |
|      * @throws Exceptions\PayloadException
 | |
|      * @return void
 | |
|      */
 | |
|     public function offsetSet($key, $value)
 | |
|     {
 | |
|         throw new PayloadException('The payload is immutable');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Don't allow changing the payload as it should be immutable.
 | |
|      *
 | |
|      * @param  string $key
 | |
|      * @throws Exceptions\PayloadException
 | |
|      * @return void
 | |
|      */
 | |
|     public function offsetUnset($key)
 | |
|     {
 | |
|         throw new PayloadException('The payload is immutable');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Magically get a claim value.
 | |
|      *
 | |
|      * @param  string  $method
 | |
|      * @param  array   $parameters
 | |
|      * @return mixed
 | |
|      * @throws \BadMethodCallException
 | |
|      */
 | |
|     public function __call($method, $parameters)
 | |
|     {
 | |
|         if (! method_exists($this, $method) && starts_with($method, 'get')) {
 | |
|             $class = sprintf('Tymon\\JWTAuth\\Claims\\%s', substr($method, 3));
 | |
| 
 | |
|             foreach ($this->claims as $claim) {
 | |
|                 if (get_class($claim) === $class) {
 | |
|                     return $claim->getValue();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         throw new \BadMethodCallException(sprintf('The claim [%s] does not exist on the payload.', $method));
 | |
|     }
 | |
| }
 | 
