<?php namespace RelationalExample\Storage; use League\OAuth2\Server\Storage\SessionInterface; use League\OAuth2\Server\Storage\Adapter; use League\OAuth2\Server\Entity\AccessTokenEntity; use League\OAuth2\Server\Entity\AuthCodeEntity; use League\OAuth2\Server\Entity\SessionEntity; use League\OAuth2\Server\Entity\ScopeEntity; use Illuminate\Database\Capsule\Manager as Capsule; class SessionStorage extends Adapter implements SessionInterface { /** * {@inheritdoc} */ public function getByAccessToken(AccessTokenEntity $accessToken) { $result = Capsule::table('oauth_sessions') ->select(['oauth_sessions.id', 'oauth_sessions.owner_type', 'oauth_sessions.owner_id', 'oauth_sessions.client_id', 'oauth_sessions.client_redirect_uri']) ->join('oauth_access_tokens', 'oauth_access_tokens.session_id', '=', 'oauth_sessions.id') ->where('oauth_access_tokens.access_token', $accessToken->getId()) ->get(); if (count($result) === 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; } /** * {@inheritdoc} */ public function getByAuthCode(AuthCodeEntity $authCode) { $result = Capsule::table('oauth_sessions') ->select(['oauth_sessions.id', 'oauth_sessions.owner_type', 'oauth_sessions.owner_id', 'oauth_sessions.client_id', 'oauth_sessions.client_redirect_uri']) ->join('oauth_auth_codes', 'oauth_auth_codes.session_id', '=', 'oauth_sessions.id') ->where('oauth_auth_codes.auth_code', $authCode->getId()) ->get(); if (count($result) === 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; } /** * {@inheritdoc} */ public function getScopes(SessionEntity $session) { $result = Capsule::table('oauth_sessions') ->select('oauth_scopes.*') ->join('oauth_session_scopes', 'oauth_sessions.id', '=', 'oauth_session_scopes.session_id') ->join('oauth_scopes', 'oauth_scopes.id', '=', 'oauth_session_scopes.scope') ->where('oauth_sessions.id', $session->getId()) ->get(); $scopes = []; foreach ($result as $scope) { $scopes[] = (new ScopeEntity($this->server))->hydrate([ 'id' => $scope['id'], 'description' => $scope['description'] ]); } return $scopes; } /** * {@inheritdoc} */ public function create($ownerType, $ownerId, $clientId, $clientRedirectUri = null) { $id = Capsule::table('oauth_sessions') ->insertGetId([ 'owner_type' => $ownerType, 'owner_id' => $ownerId, 'client_id' => $clientId ]); return $id; } /** * {@inheritdoc} */ public function associateScope(SessionEntity $session, ScopeEntity $scope) { Capsule::table('oauth_session_scopes') ->insert([ 'session_id' => $session->getId(), 'scope' => $scope->getId() ]); } }