openstackid/app/controllers/oauth2/OAuth2ProviderController.php
Sebastian Marcet 7b22f060fb Make content type check more robust
Refactoring:
* Moved discovery request test to a base class.
* added unit test for this corner case.

Change-Id: I16b38b7cced97b419b3d5b8e65ae62df803ae3fb
2015-03-23 11:49:58 -03:00

85 lines
3.0 KiB
PHP

<?php
use oauth2\IOAuth2Protocol;
use oauth2\services\IMementoOAuth2AuthenticationRequestService;
use oauth2\requests\OAuth2TokenRequest;
use oauth2\strategies\OAuth2ResponseStrategyFactoryMethod;
use oauth2\OAuth2Message;
use oauth2\requests\OAuth2TokenRevocationRequest;
use oauth2\requests\OAuth2AccessTokenValidationRequest;
/**
* Class OAuth2ProviderController
*/
class OAuth2ProviderController extends BaseController {
private $oauth2_protocol;
private $memento_service;
/**
* @param IOAuth2Protocol $oauth2_protocol
* @param IMementoOAuth2AuthenticationRequestService $memento_service
*/
public function __construct(IOAuth2Protocol $oauth2_protocol, IMementoOAuth2AuthenticationRequestService $memento_service){
$this->oauth2_protocol = $oauth2_protocol;
$this->memento_service = $memento_service;
}
/**
* Authorize HTTP Endpoint
* @return mixed
*/
public function authorize(){
$request = $this->memento_service->getCurrentAuthorizationRequest();
$response = $this->oauth2_protocol->authorize($request);
$reflector = new ReflectionClass($response);
if ($reflector->isSubclassOf('oauth2\\responses\\OAuth2Response')) {
$strategy = OAuth2ResponseStrategyFactoryMethod::buildStrategy($response);
return $strategy->handle($response);
}
return $response;
}
/**
* Token HTTP Endpoint
* @return mixed
*/
public function token(){
$response = $this->oauth2_protocol->token(new OAuth2TokenRequest(new OAuth2Message(Input::all())));
$reflector = new ReflectionClass($response);
if ($reflector->isSubclassOf('oauth2\\responses\\OAuth2Response')) {
$strategy = OAuth2ResponseStrategyFactoryMethod::buildStrategy($response);
return $strategy->handle($response);
}
return $response;
}
/**
* Revoke Token HTTP Endpoint
* @return mixed
*/
public function revoke(){
$response = $this->oauth2_protocol->revoke(new OAuth2TokenRevocationRequest(new OAuth2Message(Input::all())));
$reflector = new ReflectionClass($response);
if ($reflector->isSubclassOf('oauth2\\responses\\OAuth2Response')) {
$strategy = OAuth2ResponseStrategyFactoryMethod::buildStrategy($response);
return $strategy->handle($response);
}
return $response;
}
/**
* http://tools.ietf.org/html/draft-richer-oauth-introspection-04
* Introspection Token HTTP Endpoint
* @return mixed
*/
public function introspection(){
$response = $this->oauth2_protocol->introspection(new OAuth2AccessTokenValidationRequest(new OAuth2Message(Input::all())));
$reflector = new ReflectionClass($response);
if ($reflector->isSubclassOf('oauth2\\responses\\OAuth2Response')) {
$strategy = OAuth2ResponseStrategyFactoryMethod::buildStrategy($response);
return $strategy->handle($response);
}
return $response;
}
}