. * */ class OC_OAuth { /** * the oauth-php server object */ private static $server; /** * the oauth-php oauthstore object */ private static $store; /** * initialises the OAuth store and server */ private static function init(){ // Include the libraries require_once(OC::$THIRDPARTYROOT.'/3rdparty/oauth-php/library/OAuthServer.php'); require_once(OC::$THIRDPARTYROOT.'/3rdparty/oauth-php/library/OAuthStore.php'); // Initialise the OAuth store self::$store = OAuthStore::instance('Session'); // Create the server object self::$server = new OAuthServer(); } /** * gets a request token * TODO save the scopes in the database with this token */ public static function getRequestToken(){ self::init(); self::$server->requestToken(); } /** * get the scopes requested by this token * @param string $requesttoken * @return array scopes */ public static function getScopes($requesttoken){ // TODO } /** * exchanges authorised request token for access token */ public static function getAccessToken(){ self::init(); self::$server->accessToken(); } /** * registers a new consumer * @param array $details consumer details, keys requester_name and requester_email required * @param string $user the owncloud user adding the consumer * @return array the consumers details including secret and key */ public static function registerConsumer($details, $user){ self::init(); $consumer = self::$store->updateConsumer($details, $user, OC_Group::inGroup($user, 'admin')); return $consumer; } /** * gets a list of consumers * @param string $user */ public static function getConsumers($user=null){ $user = is_null($user) ? OC_User::getUser() : $user; return self::$store->listConsumers($user); } /** * authorises a request token - redirects to callback * @param string $user * @param bool $authorised */ public static function authoriseToken($user=null){ $user = is_null($user) ? OC_User::getUser() : $user; self::$server->authorizeVerify(); self::$server->authorize($authorised, $user); } /** * checks if request is authorised * TODO distinguish between failures as one is a 400 error and other is 401 * @return string|int */ public static function isAuthorised(){ self::init(); if(OAuthRequestVerifier::requestIsSigned()){ try{ $req = new OAuthRequestVerifier(); $user = $req->verify(); $run = true; OC_Hook::emit( "OC_User", "pre_login", array( "run" => &$run, "uid" => $user )); if(!$run){ return false; } OC_User::setUserId($user); OC_Hook::emit( "OC_User", "post_login", array( "uid" => $user )); return $user; } catch(OAuthException $e) { // 401 Unauthorised return false; } } else { // Bad request return false; } } }