Viewing file: jwt.php (2.81 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Plivo\Util;
use Plivo\Authentication\BasicAuth; use Plivo\Exceptions\PlivoValidationException; use \Firebase\JWT\JWT;
/** * Class jwt * @package Plivo\Util */ class AccessToken { protected $basicAuth; protected $username; protected $validFrom; protected $lifetime = 86400; protected $grants = []; protected $uid;
/** * Instantiates a new AccessToken object. * * @param string|null $authId * @param string|null $authToken * @param string $username endpoint * @param integer|null $validFrom valid not before this epoch * @param integer|null $lifetime validity in seconds * @param integer|null $validTill validity expires at this epoch * @param null $uid */ public function __construct( $authId = null, $authToken = null, $username = null, $validFrom = null, $lifetime = null, $validTill = null, $uid = null ) { $this->basicAuth = new BasicAuth($authId, $authToken); if ($username == null) { throw new PlivoValidationException("null username not allowed"); } $this->username = $username; $this->validFrom = intval($validFrom?:gmdate('U')); $this->lifetime = intval($lifetime?:86400); if ($lifetime != null) { if ($validTill != null) { throw new PlivoValidationException("use either lifetime or validTill"); } } else if ($validTill != null) { $this->lifetime = intval($validTill)-$this->validFrom; if ($this->lifetime < 180 || $this->lifetime > 86400) { throw new PlivoValidationException("lifetime out of [180, 86400]"); } } $this->uid = $uid?:$this->username."-".microtime(true); } /** * Adds voice calling permissions to the token * * @param bool $incoming * @param bool $outgoing */ public function addVoiceGrants($incoming = false, $outgoing = false) { $this->grants = array( "voice" => array( "incoming_allow" => $incoming, "outgoing_allow" => $outgoing ) ); }
/** * Returns JWT * @returns string $jwt */ public function toJwt() { $key = $this->basicAuth->getAuthToken(); $headers = array( "typ" => "JWT", "alg" => "HS256", "cty" => "plivo;v=1" ); $payload = array( "jti" => $this->uid, "iss" => $this->basicAuth->getAuthId(), "sub" => $this->username, "nbf" => $this->validFrom, "exp" => $this->validFrom + $this->lifetime, "grants" => $this->grants );
return JWT::encode($payload, $key, "HS256", null, $headers); } }
|