Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
80.00% |
12 / 15 |
CRAP | |
73.33% |
22 / 30 |
AuthorizationServer | |
0.00% |
0 / 1 |
|
81.25% |
13 / 16 |
29.36 | |
73.33% |
22 / 30 |
__construct | |
0.00% |
0 / 1 |
1.30 | |
33.33% |
1 / 3 |
|||
addGrantType | |
0.00% |
0 / 1 |
5.20 | |
37.50% |
3 / 8 |
|||
hasGrantType | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
getResponseTypes | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
requireScopeParam | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
scopeParamRequired | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setDefaultScope | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getDefaultScope | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
stateParamRequired | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
requireStateParam | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getScopeDelimiter | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setScopeDelimiter | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getAccessTokenTTL | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setAccessTokenTTL | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
issueAccessToken | |
100.00% |
1 / 1 |
3 | ||||||
getGrantType | |
100.00% |
1 / 1 |
2 | |
100.00% |
2 / 2 |
<?php | |
/** | |
* OAuth 2.0 Authorization Server | |
* | |
* @package league/oauth2-server | |
* @author Alex Bilbie <hello@alexbilbie.com> | |
* @copyright Copyright (c) Alex Bilbie | |
* @license http://mit-license.org/ | |
* @link https://github.com/thephpleague/oauth2-server | |
*/ | |
namespace League\OAuth2\Server; | |
use League\OAuth2\Server\Grant\GrantTypeInterface; | |
use League\OAuth2\Server\TokenType\Bearer; | |
/** | |
* OAuth 2.0 authorization server class | |
*/ | |
class AuthorizationServer extends AbstractServer | |
{ | |
/** | |
* The delimiter between scopes specified in the scope query string parameter | |
* The OAuth 2 specification states it should be a space but most use a comma | |
* | |
* @var string | |
*/ | |
protected $scopeDelimiter = ' '; | |
/** | |
* The TTL (time to live) of an access token in seconds (default: 3600) | |
* | |
* @var integer | |
*/ | |
protected $accessTokenTTL = 3600; | |
/** | |
* The registered grant response types | |
* | |
* @var array | |
*/ | |
protected $responseTypes = []; | |
/** | |
* The registered grant types | |
* | |
* @var array | |
*/ | |
protected $grantTypes = []; | |
/** | |
* Require the "scope" parameter to be in checkAuthoriseParams() | |
* | |
* @var boolean | |
*/ | |
protected $requireScopeParam = false; | |
/** | |
* Default scope(s) to be used if none is provided | |
* | |
* @var string|array | |
*/ | |
protected $defaultScope; | |
/** | |
* Require the "state" parameter to be in checkAuthoriseParams() | |
* | |
* @var boolean | |
*/ | |
protected $requireStateParam = false; | |
/** | |
* Create a new OAuth2 authorization server | |
* | |
* @return self | |
*/ | |
public function __construct() | |
{ | |
// Set Bearer as the default token type | |
$this->setTokenType(new Bearer()); | |
parent::__construct(); | |
return $this; | |
} | |
/** | |
* Enable support for a grant | |
* | |
* @param GrantTypeInterface $grantType A grant class which conforms to Interface/GrantTypeInterface | |
* @param null|string $identifier An identifier for the grant (autodetected if not passed) | |
* | |
* @return self | |
*/ | |
public function addGrantType(GrantTypeInterface $grantType, $identifier = null) | |
{ | |
if (is_null($identifier)) { | |
$identifier = $grantType->getIdentifier(); | |
} | |
// Inject server into grant | |
$grantType->setAuthorizationServer($this); | |
$this->grantTypes[$identifier] = $grantType; | |
if (!is_null($grantType->getResponseType())) { | |
$this->responseTypes[] = $grantType->getResponseType(); | |
} | |
return $this; | |
} | |
/** | |
* Check if a grant type has been enabled | |
* | |
* @param string $identifier The grant type identifier | |
* | |
* @return boolean Returns "true" if enabled, "false" if not | |
*/ | |
public function hasGrantType($identifier) | |
{ | |
return (array_key_exists($identifier, $this->grantTypes)); | |
} | |
/** | |
* Returns response types | |
* | |
* @return array | |
*/ | |
public function getResponseTypes() | |
{ | |
return $this->responseTypes; | |
} | |
/** | |
* Require the "scope" parameter in checkAuthoriseParams() | |
* | |
* @param boolean $require | |
* | |
* @return self | |
*/ | |
public function requireScopeParam($require = true) | |
{ | |
$this->requireScopeParam = $require; | |
return $this; | |
} | |
/** | |
* Is the scope parameter required? | |
* | |
* @return bool | |
*/ | |
public function scopeParamRequired() | |
{ | |
return $this->requireScopeParam; | |
} | |
/** | |
* Default scope to be used if none is provided and requireScopeParam() is false | |
* | |
* @param string $default Name of the default scope | |
* | |
* @return self | |
*/ | |
public function setDefaultScope($default = null) | |
{ | |
$this->defaultScope = $default; | |
return $this; | |
} | |
/** | |
* Default scope to be used if none is provided and requireScopeParam is false | |
* | |
* @return string|null | |
*/ | |
public function getDefaultScope() | |
{ | |
return $this->defaultScope; | |
} | |
/** | |
* Require the "state" parameter in checkAuthoriseParams() | |
* | |
* @return bool | |
*/ | |
public function stateParamRequired() | |
{ | |
return $this->requireStateParam; | |
} | |
/** | |
* Require the "state" parameter in checkAuthoriseParams() | |
* | |
* @param boolean $require | |
* | |
* @return self | |
*/ | |
public function requireStateParam($require = true) | |
{ | |
$this->requireStateParam = $require; | |
return $this; | |
} | |
/** | |
* Get the scope delimiter | |
* | |
* @return string The scope delimiter (default: ",") | |
*/ | |
public function getScopeDelimiter() | |
{ | |
return $this->scopeDelimiter; | |
} | |
/** | |
* Set the scope delimiter | |
* | |
* @param string $scopeDelimiter | |
* | |
* @return self | |
*/ | |
public function setScopeDelimiter($scopeDelimiter = ' ') | |
{ | |
$this->scopeDelimiter = $scopeDelimiter; | |
return $this; | |
} | |
/** | |
* Get the TTL for an access token | |
* | |
* @return int The TTL | |
*/ | |
public function getAccessTokenTTL() | |
{ | |
return $this->accessTokenTTL; | |
} | |
/** | |
* Set the TTL for an access token | |
* | |
* @param int $accessTokenTTL The new TTL | |
* | |
* @return self | |
*/ | |
public function setAccessTokenTTL($accessTokenTTL = 3600) | |
{ | |
$this->accessTokenTTL = $accessTokenTTL; | |
return $this; | |
} | |
/** | |
* Issue an access token | |
* | |
* @return array Authorise request parameters | |
* | |
* @throws | |
*/ | |
public function issueAccessToken() | |
{ | |
$grantType = $this->getRequest()->request->get('grant_type'); | |
if (is_null($grantType)) { | |
throw new Exception\InvalidRequestException('grant_type'); | |
} | |
// Ensure grant type is one that is recognised and is enabled | |
if (!in_array($grantType, array_keys($this->grantTypes))) { | |
throw new Exception\UnsupportedGrantTypeException($grantType); | |
} | |
// Complete the flow | |
return $this->getGrantType($grantType)->completeFlow(); | |
} | |
/** | |
* Return a grant type class | |
* | |
* @param string $grantType The grant type identifier | |
* | |
* @return Grant\GrantTypeInterface | |
* | |
* @throws | |
*/ | |
public function getGrantType($grantType) | |
{ | |
if (isset($this->grantTypes[$grantType])) { | |
return $this->grantTypes[$grantType]; | |
} | |
throw new Exception\InvalidGrantException($grantType); | |
} | |
} |