From 1f3650b98ae278d5c09c0e2885b22b4c634cf72b Mon Sep 17 00:00:00 2001 From: Josh Sherman Date: Sun, 19 Oct 2014 12:01:04 -0400 Subject: [PATCH] Porting interfaces to Mongo --- src/Mongo.php | 2 +- src/OAuth2/AccessTokenStorage.php | 17 +++++++++------ src/OAuth2/ClientStorage.php | 27 ++++++------------------ src/OAuth2/RefreshTokenStorage.php | 21 ++++++++---------- src/OAuth2/Resource.php | 11 ++-------- src/OAuth2/SessionStorage.php | 34 +++++++++++++++++------------- src/OAuth2/StorageAdapter.php | 6 +++--- 7 files changed, 51 insertions(+), 67 deletions(-) diff --git a/src/Mongo.php b/src/Mongo.php index 2ffcc50..ae0bd98 100644 --- a/src/Mongo.php +++ b/src/Mongo.php @@ -37,7 +37,7 @@ class Mongo extends Object // Instantiates our Mongo client $instance = new \MongoClient($mongo['server']); - $instance->selectDB($mongo['database']); + $instance = $instance->$mongo['database']; // Caches the instance for possible reuse later self::$instances['Mongo'] = $instance; diff --git a/src/OAuth2/AccessTokenStorage.php b/src/OAuth2/AccessTokenStorage.php index 04d8dc0..980cda0 100644 --- a/src/OAuth2/AccessTokenStorage.php +++ b/src/OAuth2/AccessTokenStorage.php @@ -30,6 +30,10 @@ class AccessTokenStorage extends StorageAdapter implements AccessTokenInterface public function getScopes(AbstractTokenEntity $token) { + $response = []; + + /* + @todo Port to Mongo $sql = 'SELECT oauth_scopes.id, oauth_scopes.description' . ' FROM oauth_access_token_scopes' . ' INNER JOIN oauth_scopes' @@ -37,7 +41,6 @@ class AccessTokenStorage extends StorageAdapter implements AccessTokenInterface . ' WHERE oauth_access_token_scopes.access_token_id = ?;'; $results = $this->db->fetch($sql, [$token->getId()]); - $response = []; if (count($results) > 0) { @@ -49,18 +52,18 @@ class AccessTokenStorage extends StorageAdapter implements AccessTokenInterface ]); } } + */ return $response; } public function create($token, $expiration, $session_id) { - $sql = 'INSERT INTO oauth_access_tokens' - . ' (access_token, session_id, expires_at)' - . ' VALUES' - . ' (?, ?, ?);'; - - $this->db->execute($sql, [$token, $session_id, $expiration]); + return $this->mongo->oauth_access_tokens->insert([ + 'access_token' => $token, + 'session_id' => $session_id, // @todo Store as MongoId? + 'expires_at' => $expiration, + ]); } public function associateScope(AbstractTokenEntity $token, ScopeEntity $scope) diff --git a/src/OAuth2/ClientStorage.php b/src/OAuth2/ClientStorage.php index 1a32583..001bf5e 100644 --- a/src/OAuth2/ClientStorage.php +++ b/src/OAuth2/ClientStorage.php @@ -11,40 +11,27 @@ class ClientStorage extends StorageAdapter implements ClientInterface { public function get($client_id, $client_secret = null, $redirect_uri = null, $grant_type = null) { - $sql = 'SELECT oauth_clients.*'; + $criteria = ['_id' => new \MongoId($client_id)]; if ($redirect_uri) { - $sql .= ', oauth_client_redirect_uris.*' - . ' INNER JOIN oauth_redirect_uris' - . ' ON oauth_clients.id = oauth_redirect_uris.client_id'; + // @todo join / query oauth_client_redirect_uris } - $sql .= ' FROM oauth_clients WHERE oauth_clients.id = ?'; - - $parameters = [$client_id]; - if ($client_secret) { - $sql .= ' AND oauth_clients.secret = ?'; - $parameters[] = $client_secret; + $criteria['secret'] = $client_secret; } - if ($redirect_uri) - { - $sql .= 'AND oauth_redirect_uris.redirect_uri = ?'; - $parameters[] = $redirect_uri; - } + $results = $this->mongo->oauth_clients->findOne($criteria); - $results = $this->db->fetch($sql, $parameters); - - if (count($results) === 1) + if ($results) { $client = new ClientEntity($this->server); $client->hydrate([ - 'id' => $results[0]['id'], - 'name' => $results[0]['name'] + 'id' => $results['_id']->{'$id'}, + 'name' => $results['name'] ]); return $client; diff --git a/src/OAuth2/RefreshTokenStorage.php b/src/OAuth2/RefreshTokenStorage.php index bceea31..978a17a 100644 --- a/src/OAuth2/RefreshTokenStorage.php +++ b/src/OAuth2/RefreshTokenStorage.php @@ -29,20 +29,17 @@ class RefreshTokenStorage extends StorageAdapter implements RefreshTokenInterfac public function create($token, $expiration, $access_token) { - $sql = 'SELECT id FROM oauth_access_tokens WHERE access_token = ?;'; - $results = $this->db->fetch($sql, [$access_token]); - $token_id = $results[0]['id']; + $results = $this->mongo->oauth_access_tokens->findOne([ + 'access_token' => $access_token, + ]); - $sql = 'INSERT INTO oauth_refresh_tokens' - . ' (refresh_token, access_token_id, expires_at, client_id)' - . ' VALUES' - . ' (?, ?, ?, ?);'; + $token_id = $results['_id']->{'$id'}; - $this->db->execute($sql, [ - $token, - $token_id, - $expiration, - $this->server->getRequest()->request->get('client_id', null), + return $this->mongo->oauth_refresh_tokens->insert([ + 'refresh_token' => $token, + 'access_token_id' => $token_id, + 'expires_at' => $expiration, + 'client_id' => $this->server->getRequest()->request->get('client_id', null), ]); } diff --git a/src/OAuth2/Resource.php b/src/OAuth2/Resource.php index 2ff78ae..8406d93 100644 --- a/src/OAuth2/Resource.php +++ b/src/OAuth2/Resource.php @@ -6,7 +6,6 @@ use \League\OAuth2\Exception\OAuthException; use \League\OAuth2\Server\AuthorizationServer; use \League\OAuth2\Server\Grant\PasswordGrant; use \League\OAuth2\Server\Grant\RefreshTokenGrant; -use \Pickles\App\Models\User; use \Pickles\Config; class Resource extends \Pickles\Resource @@ -79,14 +78,8 @@ class Resource extends \Pickles\Resource $grant->setVerifyCredentialsCallback(function ($username, $password) { - $user = new User([ - 'conditions' => [ - 'email' => $username, - ], - ]); - - return $user->count() - && password_verify($password, $user->record['password']); + $user = $this->mongo->user->findOne(['email' => $username]); + return $user && password_verify($password, $user['password']); }); break; diff --git a/src/OAuth2/SessionStorage.php b/src/OAuth2/SessionStorage.php index 2754b1d..865d1cc 100644 --- a/src/OAuth2/SessionStorage.php +++ b/src/OAuth2/SessionStorage.php @@ -61,16 +61,18 @@ class SessionStorage extends StorageAdapter implements SessionInterface public function getScopes(SessionEntity $session) { - $sql = 'SELECT oauth_sessions.*' - . ' FROM oauth_sessions' - . ' INNER JOIN oauth_access_token_scopes' - . ' ON oauth_sessions.id = oauth_access_token_scopes.access_token_id' - . ' INNER JOIN oauth_scopes' - . ' ON oauth_scopes.id = oauth_access_token_scopes.scope_id' - . ' WHERE oauth_sessions.id = ?;'; + /* + // @todo + // INNER JOIN oauth_access_token_scopes + // ON oauth_sessions.id = oauth_access_token_scopes.access_token_id + // INNER JOIN oauth_scopes + // ON oauth_scopes.id = oauth_access_token_scopes.scope_id - $results = $this->db->fetch($sql, [$session->getId()]); - $scopes = []; + $results = $this->mongo->oauth_sessions->findOne([ + '_id' => new \MongoId($session->getId()) + ]); + + $scopes = []; foreach ($results as $scope) { @@ -81,16 +83,18 @@ class SessionStorage extends StorageAdapter implements SessionInterface } return $scopes; + */ + + return []; } public function create($owner_type, $owner_id, $client_id, $client_redirect_uri = null) { - $sql = 'INSERT INTO oauth_sessions' - . ' (owner_type, owner_id, client_id)' - . ' VALUES' - . ' (?, ?, ?);'; - - return $this->db->execute($sql, [$owner_type, $owner_id, $client_id]); + return $this->mongo->oauth_sessions->insert([ + 'owner_type' => $owner_type, + 'owner_id' => $owner_id, + 'client_id' => $client_id, + ]); } public function associateScope(SessionEntity $session, ScopeEntity $scope) diff --git a/src/OAuth2/StorageAdapter.php b/src/OAuth2/StorageAdapter.php index 27ab436..56c086d 100644 --- a/src/OAuth2/StorageAdapter.php +++ b/src/OAuth2/StorageAdapter.php @@ -4,17 +4,17 @@ namespace Pickles\OAuth2; use \League\OAuth2\Server\Storage\Adapter; use \Pickles\Config; -use \Pickles\Database; +use \Pickles\Mongo; class StorageAdapter extends Adapter { protected $config; - protected $db; + protected $mongo; public function __construct() { $this->config = Config::getInstance(); - $this->db = Database::getInstance(); + $this->mongo = Mongo::getInstance(); } }