diff --git a/composer.json b/composer.json index 24f7380..68d79cd 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ }, "require": { "php": ">=5.4", - "league/oauth2-server": "4.0.x-dev" + "bshaffer/oauth2-server-php": "v1.5" }, "suggest": { "mongodb/mongo-php-driver": "Required to use the Mongo storage engine", diff --git a/src/OAuth2/AccessTokenStorage.php b/src/OAuth2/AccessTokenStorage.php deleted file mode 100644 index 980cda0..0000000 --- a/src/OAuth2/AccessTokenStorage.php +++ /dev/null @@ -1,87 +0,0 @@ -= ?;'; - - $results = $this->db->fetch($sql, [$token, time()]); - - if (count($results) === 1) - { - return (new AccessTokenEntity($this->server)) - ->setId($results[0]['access_token']) - ->setExpireTime($results[0]['expires_at']); - } - - return null; - } - - 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' - . ' ON oauth_access_token_scopes.scope_id = oauth_scopes.id' - . ' WHERE oauth_access_token_scopes.access_token_id = ?;'; - - $results = $this->db->fetch($sql, [$token->getId()]); - - if (count($results) > 0) - { - foreach ($results as $row) - { - $response[] = (new ScopeEntity($this->server))->hydrate([ - 'id' => $row['id'], - 'description' => $row['description'] - ]); - } - } - */ - - return $response; - } - - public function create($token, $expiration, $session_id) - { - 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) - { - $sql = 'INSERT INTO oauth_access_token_scopes' - . ' (access_token, scope)' - . ' VALUES' - . ' (?, ?);'; - - $this->db->execute($sql, [$token->getId(), $scope->getId()]); - } - - public function delete(AbstractTokenEntity $token) - { - $sql = 'DELETE FROM oauth_access_token_scopes' - . ' WHERE access_token = ?;'; - - $this->db->execute($sql, [$token->getId()]); - } -} - diff --git a/src/OAuth2/ClientStorage.php b/src/OAuth2/ClientStorage.php deleted file mode 100644 index 001bf5e..0000000 --- a/src/OAuth2/ClientStorage.php +++ /dev/null @@ -1,68 +0,0 @@ - new \MongoId($client_id)]; - - if ($redirect_uri) - { - // @todo join / query oauth_client_redirect_uris - } - - if ($client_secret) - { - $criteria['secret'] = $client_secret; - } - - $results = $this->mongo->oauth_clients->findOne($criteria); - - if ($results) - { - $client = new ClientEntity($this->server); - - $client->hydrate([ - 'id' => $results['_id']->{'$id'}, - 'name' => $results['name'] - ]); - - return $client; - } - - return null; - } - - public function getBySession(SessionEntity $session) - { - $sql = 'SELECT oauth_clients.id, oauth_clients.name' - . ' FROM oauth_clients' - . ' INNER JOIN oauth_sessions' - . ' ON oauth_clients.id = oauth_sessions.client_id' - . ' WHERE oauth_sessions.id = ?'; - - $results = $this->db->fetch($sql, [$session->getId()]); - - if (count($results) === 1) - { - $client = new ClientEntity($this->server); - - $client->hydrate([ - 'id' => $results[0]['id'], - 'name' => $results[0]['name'] - ]); - - return $client; - } - - return null; - } -} - diff --git a/src/OAuth2/RefreshTokenStorage.php b/src/OAuth2/RefreshTokenStorage.php deleted file mode 100644 index 978a17a..0000000 --- a/src/OAuth2/RefreshTokenStorage.php +++ /dev/null @@ -1,53 +0,0 @@ -= ?;'; - - $results = $this->db->fetch($sql, [$token, time()]); - - if (count($results) === 1) - { - return (new RefreshTokenEntity($this->server)) - ->setId($results[0]['refresh_token']) - ->setExpireTime($results[0]['expires_at']) - ->setAccessTokenId($results[0]['access_token_id']); - } - - return null; - } - - public function create($token, $expiration, $access_token) - { - $results = $this->mongo->oauth_access_tokens->findOne([ - 'access_token' => $access_token, - ]); - - $token_id = $results['_id']->{'$id'}; - - 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), - ]); - } - - public function delete(RefreshTokenEntity $token) - { - $sql = 'DELETE FROM oauth_refresh_tokens WHERE refresh_token = ?;'; - - $this->db->execute($sql, [$token->getId()]); - } -} - diff --git a/src/OAuth2/Resource.php b/src/OAuth2/Resource.php index 8406d93..8f03f0e 100644 --- a/src/OAuth2/Resource.php +++ b/src/OAuth2/Resource.php @@ -2,10 +2,9 @@ namespace Pickles\OAuth2; -use \League\OAuth2\Exception\OAuthException; -use \League\OAuth2\Server\AuthorizationServer; -use \League\OAuth2\Server\Grant\PasswordGrant; -use \League\OAuth2\Server\Grant\RefreshTokenGrant; +use \OAuth2\GrantType\UserCredentials; +use \OAuth2\Request; +use \OAuth2\Server; use \Pickles\Config; class Resource extends \Pickles\Resource @@ -28,6 +27,12 @@ class Resource extends \Pickles\Resource case 'oauth/access_token': 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); diff --git a/src/OAuth2/ScopeStorage.php b/src/OAuth2/ScopeStorage.php deleted file mode 100644 index c614eb7..0000000 --- a/src/OAuth2/ScopeStorage.php +++ /dev/null @@ -1,26 +0,0 @@ -db->fetch($sql, [$scope]); - - if (count($results) === 0) - { - return null; - } - - return (new ScopeEntity($this->server))->hydrate([ - 'id' => $result[0]['id'], - 'description' => $result[0]['description'], - ]); - } -} - diff --git a/src/OAuth2/SessionStorage.php b/src/OAuth2/SessionStorage.php deleted file mode 100644 index 865d1cc..0000000 --- a/src/OAuth2/SessionStorage.php +++ /dev/null @@ -1,110 +0,0 @@ -db->fetch($sql, [$access_token->getId()]); - - if (count($results) === 1) - { - $session = new SessionEntity($this->server); - $session->setId($result[0]['id']); - $session->setOwner($result[0]['owner_type'], $result[0]['owner_id']); - - return $session; - } - - return null; - } - - public function getByAuthCode(AuthCodeEntity $auth_code) - { - $sql = 'SELECT oauth_sessions.id, oauth_sessions.owner_type,' - . ' oauth_sessions.owner_id, oauth_sessions.client_id,' - . ' oauth_sessions.client_redirect_uri' - . ' FROM oauth_sessions' - . ' INNER JOIN oauth_authorization_codes' - . ' ON oauth_authorization_codes.session_id = oauth_sessions.id' - . ' WHERE oauth_authorization_codes.authorization_code = ?;'; - - $results = $this->db->fetch($sql, [$auth_code->getId()]); - - if (count($results) === 1) - { - $session = new SessionEntity($this->server); - $session->setId($result[0]['id']); - $session->setOwner($result[0]['owner_type'], $result[0]['owner_id']); - - return $session; - } - - return null; - } - - public function getScopes(SessionEntity $session) - { - /* - // @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->mongo->oauth_sessions->findOne([ - '_id' => new \MongoId($session->getId()) - ]); - - $scopes = []; - - foreach ($results as $scope) - { - $scopes[] = (new ScopeEntity($this->server))->hydrate([ - 'id' => $scope['id'], - 'description' => $scope['description'], - ]); - } - - return $scopes; - */ - - return []; - } - - public function create($owner_type, $owner_id, $client_id, $client_redirect_uri = null) - { - 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) - { - $sql = 'INSERT INTO oauth_access_token_scopes' - . ' (access_token_id, scope_id)' - . ' VALUES' - . ' (?, ?);'; - - $this->db->execute($sql, [$session->getId(), $scope->getId()]); - } -} - diff --git a/src/OAuth2/Storage.php b/src/OAuth2/Storage.php new file mode 100644 index 0000000..9642d0b --- /dev/null +++ b/src/OAuth2/Storage.php @@ -0,0 +1,38 @@ +mongo = \Pickles\Mongo::getInstance(); + } + + public function getUser($email) + { + return $this->mongo->user->findOne(['email' => $email]); + } + + public function getUserDetails($email) + { + if ($user = $this->getUser($email)) + { + $user['user_id'] = $user['_id']->{'$id'}; + } + + return $user; + } + + protected function checkPassword($user, $password) + { + return $user && password_verify($password, $user['password']); + } +} + diff --git a/src/OAuth2/StorageAdapter.php b/src/OAuth2/StorageAdapter.php deleted file mode 100644 index 56c086d..0000000 --- a/src/OAuth2/StorageAdapter.php +++ /dev/null @@ -1,20 +0,0 @@ -config = Config::getInstance(); - $this->mongo = Mongo::getInstance(); - } -} -