Cleaned up OAuth2 response

This commit is contained in:
Josh Sherman 2014-10-20 05:54:26 -04:00
parent 80a36aee99
commit 1e8e9efd95
4 changed files with 22 additions and 52 deletions

View file

@ -4,6 +4,7 @@ namespace Pickles\OAuth2;
use \OAuth2\GrantType\UserCredentials; use \OAuth2\GrantType\UserCredentials;
use \OAuth2\Request; use \OAuth2\Request;
use \OAuth2\Response;
use \OAuth2\Server; use \OAuth2\Server;
use \Pickles\Config; use \Pickles\Config;
@ -24,23 +25,9 @@ class Resource extends \Pickles\Resource
switch (substr($_REQUEST['request'], strlen($_SERVER['__version']) + 2)) switch (substr($_REQUEST['request'], strlen($_SERVER['__version']) + 2))
{ {
case 'oauth/access_token': case 'oauth2/token':
try try
{ {
$storage = new Storage($this->mongo, ['user_table' => 'user']);
$server = new Server($storage);
$server->addGrantType(new UserCredentials($storage));
$server->handleTokenRequest(Request::createFromGlobals())->send();
exit;
$server = new AuthorizationServer;
$server->setSessionStorage(new SessionStorage);
$server->setAccessTokenStorage(new AccessTokenStorage);
$server->setClientStorage(new ClientStorage);
$server->setScopeStorage(new ScopeStorage);
$server->setRefreshTokenStorage(new RefreshTokenStorage);
$grant_type = $_REQUEST['grant_type']; $grant_type = $_REQUEST['grant_type'];
$grants = ['password']; $grants = ['password'];
@ -54,7 +41,7 @@ class Resource extends \Pickles\Resource
throw new \Exception('Unsupported grant type.', 403); throw new \Exception('Unsupported grant type.', 403);
} }
// Defaults TTLs to 1 day and 1 week respectively // @todo Defaults TTLs to 1 day and 1 week respectively
$token_ttl = 3600; $token_ttl = 3600;
$refresh_ttl = 604800; $refresh_ttl = 604800;
@ -78,45 +65,34 @@ class Resource extends \Pickles\Resource
break; break;
case 'password': case 'password':
$grant = new PasswordGrant; $storage = new Storage($this->mongo, ['user_table' => 'user']);
$grant->setAccessTokenTTL($token_ttl); $server = new Server($storage);
$grant->setVerifyCredentialsCallback(function ($username, $password) $server->addGrantType(new UserCredentials($storage));
$request = Request::createFromGlobals();
$response = new Response;
$response = $server->handleTokenRequest($request, $response);
$body = json_decode($response->getResponseBody(), true);
if (isset($body['error']))
{ {
$user = $this->mongo->user->findOne(['email' => $username]); $parameters = $response->getParameters();
return $user && password_verify($password, $user['password']);
});
throw new \Exception(
$parameters['error_description'],
$response->getStatusCode()
);
}
$response = $body;
break; break;
case 'refresh_token': case 'refresh_token':
throw new \Exception('Not Implemented', 501); throw new \Exception('Not Implemented', 501);
// @todo Need to work through this, appears lib is busted
$grant = new RefreshTokenGrant;
//$grant->setAccessTokenTTL($refresh_ttl);
$server->addGrantType($grant);
break; break;
} }
$server->addGrantType($grant);
// Adds the refresh token grant if enabled
if ($grant_type != 'refresh_token'
&& in_array('refresh_token', $grants))
{
if (isset($config['ttl']['refresh_token']))
{
$refresh_ttl = $config['ttl']['refresh_token'];
}
$grant = new RefreshTokenGrant;
$grant->setAccessTokenTTL($refresh_ttl);
$server->addGrantType($grant);
}
$response = $server->issueAccessToken();
return $response; return $response;
} }
catch (OAuthException $e) catch (OAuthException $e)

0
src/Redis.php Normal file
View file

View file

@ -14,12 +14,6 @@
namespace Pickles; namespace Pickles;
use \League\OAuth2\Server\ResourceServer;
use Pickles\OAuth2\AccessTokenStorage;
use Pickles\OAuth2\ClientStorage;
use Pickles\OAuth2\ScopeStorage;
use Pickles\OAuth2\SessionStorage;
/** /**
* Resource Class * Resource Class
* *

View file

@ -54,7 +54,7 @@ class Router extends Object
$_SERVER['__version'] = substr($version, 1); $_SERVER['__version'] = substr($version, 1);
// Checks if we're trying to rock some OAuth // Checks if we're trying to rock some OAuth
if ($components[0] == 'oauth') if ($components[0] == 'oauth2')
{ {
$class = 'Pickles\OAuth2\Resource'; $class = 'Pickles\OAuth2\Resource';
} }