. * */ class OC_OAuth_Store extends OAuthDataStore { static private $MAX_TIMESTAMP_DIFFERENCE = 300; function lookup_consumer($consumer_key) { $query = OC_DB::prepare("SELECT `key`, `secret`, `callback_success` FROM `*PREFIX*oauth_consumers` WHERE `key` = ?"); $results = $query->execute(array($consumer_key)); if($results->numRows()==0){ return NULL; } else { $details = $results->fetchRow(); $callback = !empty($details['callback_success']) ? $details['callback_success'] : NULL; return new OAuthConsumer($details['key'], $details['secret'], $callback); } } function lookup_token($consumer, $token_type, $token) { $query = OC_DB::prepare("SELECT `key`, `secret`, `type` FROM `*PREFIX*oauth_tokens` WHERE `consumer_key` = ? AND `key` = ? AND `type` = ?"); $results = $query->execute(array($consumer->key, $token->key, $token_type)); if($results->numRows()==0){ return NULL; } else { $token = $results->fetchRow(); return new OAuthToken($token['key'], $token['secret']); } } function lookup_nonce($consumer, $token, $nonce, $timestamp) { $query = OC_DB::prepare("INSERT INTO `*PREFIX*oauth_nonce` (`consumer_key`, `token`, `timestamp`, `nonce`) VALUES (?, ?, ?, ?)"); $affectedrows = $query->execute(array($consumer->key, $token, $timestamp, $nonce)); // Delete all timestamps older than the one passed $query = OC_DB::prepare("DELETE FROM `*PREFIX*oauth_nonce` WHERE `consumer_key` = ? AND `token` = ? AND `timestamp` < ?"); $result = $query->exec(array($consumer->key, $token, $timestamp - self::$MAX_TIMESTAMP_DIFFERENCE)); return $result; } function new_token($consumer, $token_type) { $key = md5(time()); $secret = time() + time(); $token = new OAuthToken($key, md5(md5($secret))); $query = OC_DB::prepare("INSERT INTO `*PREFIX*oauth_tokens` (`consumer_key`, `key`, `secret`, `type`, `timestamp`) VALUES (?, ?, ?, ?, ?, ?)"); $result = $query->execute(array($consumer->key, $key, $secret, $token_type, time())); return $token; } function new_request_token($consumer, $callback = null) { return $this->new_token($consumer, 'request'); } function authorise_request_token($token, $consumer, $uid) { $query = OC_DB::prepare("UPDATE `*PREFIX*oauth_tokens` SET uid = ? WHERE `consumer_key` = ? AND `key` = ? AND `type` = ?"); $query->execute(array($uid, $consumer->key, $token->key, 'request')); // TODO Return oauth_verifier } function new_access_token($token, $consumer, $verifier = null) { $query = OC_DB::prepare("SELECT `timestamp`, `scope` FROM `*PREFIX*oauth_tokens` WHERE `consumer_key` = ? AND `key` = ? AND `type` = ?"); $result = $query->execute(array($consumer->key, $token->key, 'request'))->fetchRow(); if (isset($result['timestamp'])) { if ($timestamp + self::MAX_REQUEST_TOKEN_TTL < time()) { return false; } $accessToken = $this->new_token($consumer, 'access', $result['scope']); } // Delete request token $query = OC_DB::prepare("DELETE FROM `*PREFIX*oauth_tokens` WHERE `key` = ? AND `type` = ?"); $query->execute(array($token->key, 'request')); return $accessToken; } }