67 lines
1.6 KiB
PHP
Executable File
67 lines
1.6 KiB
PHP
Executable File
<?php
|
|
|
|
|
|
namespace Twilio\Jwt\Client;
|
|
|
|
|
|
/**
|
|
* Scope URI implementation
|
|
*
|
|
* Simple way to represent configurable privileges in an OAuth
|
|
* friendly way. For our case, they look like this:
|
|
*
|
|
* scope:<service>:<privilege>?<params>
|
|
*
|
|
* For example:
|
|
* scope:client:incoming?name=jonas
|
|
*/
|
|
class ScopeURI {
|
|
public $service;
|
|
public $privilege;
|
|
public $params;
|
|
|
|
public function __construct($service, $privilege, $params = array()) {
|
|
$this->service = $service;
|
|
$this->privilege = $privilege;
|
|
$this->params = $params;
|
|
}
|
|
|
|
public function toString() {
|
|
$uri = "scope:{$this->service}:{$this->privilege}";
|
|
if (count($this->params)) {
|
|
$uri .= "?" . http_build_query($this->params, '', '&');
|
|
}
|
|
return $uri;
|
|
}
|
|
|
|
/**
|
|
* Parse a scope URI into a ScopeURI object
|
|
*
|
|
* @param string $uri The scope URI
|
|
* @return ScopeURI The parsed scope uri
|
|
* @throws \UnexpectedValueException
|
|
*/
|
|
public static function parse($uri) {
|
|
if (strpos($uri, 'scope:') !== 0) {
|
|
throw new \UnexpectedValueException(
|
|
'Not a scope URI according to scheme');
|
|
}
|
|
|
|
$parts = explode('?', $uri, 1);
|
|
$params = null;
|
|
|
|
if (count($parts) > 1) {
|
|
parse_str($parts[1], $params);
|
|
}
|
|
|
|
$parts = explode(':', $parts[0], 2);
|
|
|
|
if (count($parts) != 3) {
|
|
throw new \UnexpectedValueException(
|
|
'Not enough parts for scope URI');
|
|
}
|
|
|
|
list($scheme, $service, $privilege) = $parts;
|
|
return new ScopeURI($service, $privilege, $params);
|
|
}
|
|
} |