* @copyright Copyright (c) 2013 PHP League of Extraordinary Packages * @license http://mit-license.org/ * @link http://github.com/php-loep/oauth2-server */ namespace League\OAuth2\Server\Storage; interface SessionInterface { /** * Create a new session * * Example SQL query: * * * INSERT INTO oauth_sessions (client_id, owner_type, owner_id) * VALUE (:clientId, :ownerType, :ownerId) * * * @param string $clientId The client ID * @param string $ownerType The type of the session owner (e.g. "user") * @param string $ownerId The ID of the session owner (e.g. "123") * @return int The session ID */ public function createSession($clientId, $ownerType, $ownerId); /** * Delete a session * * Example SQL query: * * * DELETE FROM oauth_sessions WHERE client_id = :clientId AND owner_type = :type AND owner_id = :typeId * * * @param string $clientId The client ID * @param string $ownerType The type of the session owner (e.g. "user") * @param string $ownerId The ID of the session owner (e.g. "123") * @return void */ public function deleteSession($clientId, $ownerType, $ownerId); /** * Associate a redirect URI with a session * * Example SQL query: * * * INSERT INTO oauth_session_redirects (session_id, redirect_uri) VALUE (:sessionId, :redirectUri) * * * @param int $sessionId The session ID * @param string $redirectUri The redirect URI * @return void */ public function associateRedirectUri($sessionId, $redirectUri); /** * Associate an access token with a session * * Example SQL query: * * * INSERT INTO oauth_session_access_tokens (session_id, access_token, access_token_expires) * VALUE (:sessionId, :accessToken, :accessTokenExpire) * * * @param int $sessionId The session ID * @param string $accessToken The access token * @param int $expireTime Unix timestamp of the access token expiry time * @return void */ public function associateAccessToken($sessionId, $accessToken, $expireTime); /** * Associate a refresh token with a session * * Example SQL query: * * * INSERT INTO oauth_session_refresh_tokens (session_access_token_id, refresh_token, refresh_token_expires, * client_id) VALUE (:accessTokenId, :refreshToken, :expireTime, :clientId) * * * @param int $accessTokenId The access token ID * @param string $refreshToken The refresh token * @param int $expireTime Unix timestamp of the refresh token expiry time * @param string $clientId The client ID * @return void */ public function associateRefreshToken($accessTokenId, $refreshToken, $expireTime, $clientId); /** * Assocate an authorization code with a session * * Example SQL query: * * * INSERT INTO oauth_session_authcodes (session_id, auth_code, auth_code_expires, scope_ids) * VALUE (:sessionId, :authCode, :authCodeExpires, :scopeIds) * * * @param int $sessionId The session ID * @param string $authCode The authorization code * @param int $expireTime Unix timestamp of the access token expiry time * @param string $scopeIds Comma seperated list of scope IDs to be later associated (default = null) * @return void */ public function associateAuthCode($sessionId, $authCode, $expireTime, $scopeIds = null); /** * Remove an associated authorization token from a session * * Example SQL query: * * * DELETE FROM oauth_session_authcodes WHERE session_id = :sessionId * * * @param int $sessionId The session ID * @return void */ public function removeAuthCode($sessionId); /** * Validate an authorization code * * Example SQL query: * * * SELECT oauth_sessions.id, oauth_session_authcodes.scope_ids FROM oauth_sessions * JOIN oauth_session_authcodes ON oauth_session_authcodes.`session_id` = oauth_sessions.id * JOIN oauth_session_redirects ON oauth_session_redirects.`session_id` = oauth_sessions.id WHERE * oauth_sessions.client_id = :clientId AND oauth_session_authcodes.`auth_code` = :authCode * AND `oauth_session_authcodes`.`auth_code_expires` >= :time AND * `oauth_session_redirects`.`redirect_uri` = :redirectUri * * * Expected response: * * * array( * 'id' => (int), // the session ID * 'scope_ids' => (string) * ) * * * @param string $clientId The client ID * @param string $redirectUri The redirect URI * @param string $authCode The authorization code * @return array|bool False if invalid or array as above */ public function validateAuthCode($clientId, $redirectUri, $authCode); /** * Validate an access token * * Example SQL query: * * * SELECT session_id, oauth_sessions.`client_id`, oauth_sessions.`owner_id`, oauth_sessions.`owner_type` * FROM `oauth_session_access_tokens` JOIN oauth_sessions ON oauth_sessions.`id` = session_id WHERE * access_token = :accessToken AND access_token_expires >= UNIX_TIMESTAMP(NOW()) * * * Expected response: * * * array( * 'session_id' => (int), * 'client_id' => (string), * 'owner_id' => (string), * 'owner_type' => (string) * ) * * * @param string $accessToken The access token * @return array|bool False if invalid or an array as above */ public function validateAccessToken($accessToken); /** * Removes a refresh token * * Example SQL query: * * * DELETE FROM `oauth_session_refresh_tokens` WHERE refresh_token = :refreshToken * * * @param string $refreshToken The refresh token to be removed * @return void */ public function removeRefreshToken($refreshToken); /** * Validate a refresh token * * Example SQL query: * * * SELECT session_access_token_id FROM `oauth_session_refresh_tokens` WHERE refresh_token = :refreshToken * AND refresh_token_expires >= UNIX_TIMESTAMP(NOW()) AND client_id = :clientId * * * @param string $refreshToken The access token * @param string $clientId The client ID * @return int|bool The ID of the access token the refresh token is linked to (or false if invalid) */ public function validateRefreshToken($refreshToken, $clientId); /** * Get an access token by ID * * Example SQL query: * * * SELECT * FROM `oauth_session_access_tokens` WHERE `id` = :accessTokenId * * * Expected response: * * * array( * 'id' => (int), * 'session_id' => (int), * 'access_token' => (string), * 'access_token_expires' => (int) * ) * * * @param int $accessTokenId The access token ID * @return array */ public function getAccessToken($accessTokenId); /** * Associate scopes with an auth code (bound to the session) * * Example SQL query: * * * INSERT INTO `oauth_session_authcode_scopes` (`session_id`, `scope_id`) VALUES (:sessionId, :scopeId) * * * @param int $sessionId The session ID * @param int $scopeId The scope ID * @return void */ public function associateAuthCodeScope($sessionId, $scopeId); /** * Get the scopes associated with an auth code * * Example SQL query: * * * SELECT scope_id FROM `oauth_session_authcode_scopes` WHERE session_id = :sessionId * * * Expected response: * * * array( * array( * 'scope_id' => (int) * ), * array( * 'scope_id' => (int) * ), * ... * ) * * * @param int $sessionId The session ID * @return array */ public function getAuthCodeScopes($sessionId); /** * Associate a scope with an access token * * Example SQL query: * * * INSERT INTO `oauth_session_token_scopes` (`session_access_token_id`, `scope_id`) VALUE (:accessTokenId, :scopeId) * * * @param int $accessTokenId The ID of the access token * @param int $scopeId The ID of the scope * @return void */ public function associateScope($accessTokenId, $scopeId); /** * Get all associated access tokens for an access token * * Example SQL query: * * * SELECT oauth_scopes.* FROM oauth_session_token_scopes JOIN oauth_session_access_tokens * ON oauth_session_access_tokens.`id` = `oauth_session_token_scopes`.`session_access_token_id` * JOIN oauth_scopes ON oauth_scopes.id = `oauth_session_token_scopes`.`scope_id` * WHERE access_token = :accessToken * * * Expected response: * * * array ( * array( * 'key' => (string), * 'name' => (string), * 'description' => (string) * ), * ... * ... * ) * * * @param string $accessToken The access token * @return array */ public function getScopes($accessToken); }