oauth2-server/src/AuthorizationServer.php

264 lines
6.3 KiB
PHP
Raw Normal View History

2013-01-04 14:44:02 -05:00
<?php
/**
* OAuth 2.0 Authorization Server
*
2014-01-08 16:15:29 +00:00
* @package league/oauth2-server
* @author Alex Bilbie <hello@alexbilbie.com>
2014-03-09 19:34:23 +00:00
* @copyright Copyright (c) Alex Bilbie
* @license http://mit-license.org/
2014-03-09 20:05:38 +00:00
* @link https://github.com/thephpleague/oauth2-server
*/
2013-01-04 14:44:02 -05:00
namespace League\OAuth2\Server;
2013-01-04 14:44:02 -05:00
2013-12-24 17:02:58 +00:00
use League\OAuth2\Server\Grant\GrantTypeInterface;
2014-05-07 17:09:34 +01:00
use League\OAuth2\Server\TokenType\Bearer;
2013-12-24 17:02:58 +00:00
use Symfony\Component\HttpFoundation\Request;
2013-01-29 14:16:47 +00:00
/**
* OAuth 2.0 authorization server class
*/
class AuthorizationServer extends AbstractServer
2013-01-04 14:44:02 -05:00
{
/**
* The delimeter 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 $scopeDelimeter = ' ';
2013-01-04 14:44:02 -05:00
/**
* The TTL (time to live) of an access token in seconds (default: 3600)
* @var integer
*/
protected $accessTokenTTL = 3600;
2013-01-04 14:44:02 -05:00
/**
* The registered grant response types
* @var array
*/
2013-12-26 20:22:31 +00:00
protected $responseTypes = [];
2013-01-04 14:44:02 -05:00
/**
* The registered grant types
* @var array
*/
2013-12-26 20:22:31 +00:00
protected $grantTypes = [];
2013-01-04 14:44:02 -05:00
2013-03-04 13:10:00 +00:00
/**
* 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
*/
2014-01-10 17:30:12 +00:00
protected $defaultScope;
/**
* Require the "state" parameter to be in checkAuthoriseParams()
* @var boolean
*/
protected $requireStateParam = false;
2013-03-04 13:10:00 +00:00
/**
* Create a new OAuth2 authorization server
2013-12-26 20:22:31 +00:00
* @return self
*/
2013-12-24 17:02:58 +00:00
public function __construct()
{
// Set Bearer as the default token type
2014-11-08 18:26:12 +00:00
$this->setTokenType(new Bearer());
2014-05-07 17:09:34 +01:00
parent::__construct();
2013-12-26 20:22:31 +00:00
return $this;
2013-12-24 17:02:58 +00:00
}
/**
* Enable support for a grant
2014-05-03 10:53:43 +01:00
* @param GrantTypeInterface $grantType A grant class which conforms to Interface/GrantTypeInterface
* @param null|string $identifier An identifier for the grant (autodetected if not passed)
2013-12-24 17:02:58 +00:00
* @return self
*/
public function addGrantType(GrantTypeInterface $grantType, $identifier = null)
2013-01-04 14:44:02 -05:00
{
if (is_null($identifier)) {
$identifier = $grantType->getIdentifier();
}
// Inject server into grant
$grantType->setAuthorizationServer($this);
$this->grantTypes[$identifier] = $grantType;
2014-05-03 11:08:33 +01:00
if (!is_null($grantType->getResponseType())) {
$this->responseTypes[] = $grantType->getResponseType();
2013-01-04 14:44:02 -05:00
}
2013-12-24 17:02:58 +00:00
return $this;
2013-01-04 14:44:02 -05:00
}
/**
* Check if a grant type has been enabled
* @param string $identifier The grant type identifier
2013-12-24 17:02:58 +00:00
* @return boolean Returns "true" if enabled, "false" if not
*/
public function hasGrantType($identifier)
{
return (array_key_exists($identifier, $this->grantTypes));
}
2013-11-25 23:58:42 +00:00
/**
* Returns response types
* @return array
*/
2013-03-31 13:37:12 +01:00
public function getResponseTypes()
{
return $this->responseTypes;
}
2013-03-04 13:10:00 +00:00
/**
* Require the "scope" paremter in checkAuthoriseParams()
* @param boolean $require
2013-12-24 17:02:58 +00:00
* @return self
2013-03-04 13:10:00 +00:00
*/
public function requireScopeParam($require = true)
{
$this->requireScopeParam = $require;
2014-05-03 10:53:43 +01:00
2013-12-24 17:02:58 +00:00
return $this;
}
2013-03-21 16:22:29 +00:00
/**
* Is the scope parameter required?
* @return bool
*/
public function scopeParamRequired()
{
return $this->requireScopeParam;
}
/**
2014-01-08 16:15:29 +00:00
* Default scope to be used if none is provided and requireScopeParam() is false
* @param string $default Name of the default scope
2014-11-12 18:10:29 +00:00
* @return self
*/
2013-03-21 16:22:16 +00:00
public function setDefaultScope($default = null)
{
$this->defaultScope = $default;
2014-05-03 10:53:43 +01:00
2013-11-25 23:58:42 +00:00
return $this;
}
2013-03-21 16:22:44 +00:00
/**
* Default scope to be used if none is provided and requireScopeParam is false
* @return string|null
*/
public function getDefaultScope()
{
return $this->defaultScope;
}
2013-03-31 13:57:24 +01:00
/**
* Require the "state" paremter in checkAuthoriseParams()
2014-11-12 18:10:29 +00:00
* @return bool
2013-03-31 13:57:24 +01:00
*/
public function stateParamRequired()
{
return $this->requireStateParam;
}
/**
* Require the "state" paremter in checkAuthoriseParams()
* @param boolean $require
2014-11-12 18:10:29 +00:00
* @return self
*/
public function requireStateParam($require = true)
2013-03-04 13:10:00 +00:00
{
$this->requireStateParam = $require;
2014-05-03 10:53:43 +01:00
2013-11-25 23:58:42 +00:00
return $this;
2013-03-04 13:10:00 +00:00
}
/**
* Get the scope delimeter
* @return string The scope delimiter (default: ",")
*/
public function getScopeDelimeter()
{
return $this->scopeDelimeter;
}
/**
* Set the scope delimiter
* @param string $scopeDelimeter
2014-11-12 18:10:29 +00:00
* @return self
*/
2013-05-08 18:06:09 -07:00
public function setScopeDelimeter($scopeDelimeter = ' ')
2013-01-04 14:44:02 -05:00
{
$this->scopeDelimeter = $scopeDelimeter;
2014-05-03 10:53:43 +01:00
2013-11-25 23:58:42 +00:00
return $this;
2013-01-04 14:44:02 -05:00
}
/**
* 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
2014-11-12 18:10:29 +00:00
* @return self
*/
2013-05-08 18:06:09 -07:00
public function setAccessTokenTTL($accessTokenTTL = 3600)
2013-01-04 14:44:02 -05:00
{
$this->accessTokenTTL = $accessTokenTTL;
2014-05-03 10:53:43 +01:00
2013-11-25 23:58:42 +00:00
return $this;
2013-01-04 14:44:02 -05:00
}
/**
* Issue an access token
2013-12-24 17:02:58 +00:00
* @return array Authorise request parameters
2014-11-12 18:10:29 +00:00
* @throws
*/
2014-01-10 12:30:13 +00:00
public function issueAccessToken()
{
2013-12-24 17:02:58 +00:00
$grantType = $this->getRequest()->request->get('grant_type');
if (is_null($grantType)) {
2014-04-25 11:24:33 +01:00
throw new Exception\InvalidRequestException('grant_type');
2013-01-29 16:24:28 +00:00
}
2013-01-29 16:24:28 +00:00
// Ensure grant type is one that is recognised and is enabled
2014-05-03 11:08:33 +01:00
if (!in_array($grantType, array_keys($this->grantTypes))) {
2014-04-25 11:24:33 +01:00
throw new Exception\UnsupportedGrantTypeException($grantType);
2013-01-29 16:24:28 +00:00
}
2013-01-29 16:24:48 +00:00
// Complete the flow
2014-01-10 12:30:13 +00:00
return $this->getGrantType($grantType)->completeFlow();
2013-01-29 16:24:48 +00:00
}
/**
* Return a grant type class
2014-05-03 10:53:43 +01:00
* @param string $grantType The grant type identifer
2014-04-25 11:24:33 +01:00
* @return Grant\GrantTypeInterface
2014-11-12 18:10:29 +00:00
* @throws
*/
public function getGrantType($grantType)
2013-01-29 16:24:48 +00:00
{
if (isset($this->grantTypes[$grantType])) {
return $this->grantTypes[$grantType];
}
2014-04-25 11:24:33 +01:00
throw new Exception\InvalidGrantException($grantType);
}
2013-01-04 14:44:02 -05:00
}