diff --git a/include/api.php b/include/api.php index ea804b18ba..e55af1ae99 100644 --- a/include/api.php +++ b/include/api.php @@ -25,12 +25,12 @@ use Friendica\Network\HTTPException\TooManyRequestsException; use Friendica\Object\Contact; use Friendica\Object\Photo; use Friendica\Protocol\Diaspora; +use Friendica\Protocol\FKOAuth1; use Friendica\Util\XML; require_once 'include/bbcode.php'; require_once 'include/datetime.php'; require_once 'include/conversation.php'; -require_once 'include/oauth.php'; require_once 'include/html2plain.php'; require_once 'mod/share.php'; require_once 'mod/item.php'; @@ -159,10 +159,9 @@ function api_login(App $a) { // login with oauth try { - $oauth = new FKOAuth1(); - list($consumer,$token) = $oauth->verify_request(OAuthRequest::from_request()); + list($consumer, $token) = FKOAuth1::verify_request(OAuthRequest::from_request()); if (!is_null($token)) { - $oauth->loginUser($token->uid); + FKOAuth1::loginUser($token->uid); call_hooks('logged_in', $a->user); return; } @@ -3365,8 +3364,7 @@ api_register_func('api/direct_messages', 'api_direct_messages_inbox', true); function api_oauth_request_token($type) { try { - $oauth = new FKOAuth1(); - $r = $oauth->fetch_request_token(OAuthRequest::from_request()); + $r = FKOAuth1::fetch_request_token(OAuthRequest::from_request()); } catch (Exception $e) { echo "error=" . OAuthUtil::urlencode_rfc3986($e->getMessage()); killme(); @@ -3378,8 +3376,7 @@ function api_oauth_request_token($type) function api_oauth_access_token($type) { try { - $oauth = new FKOAuth1(); - $r = $oauth->fetch_access_token(OAuthRequest::from_request()); + $r = FKOAuth1::fetch_access_token(OAuthRequest::from_request()); } catch (Exception $e) { echo "error=". OAuthUtil::urlencode_rfc3986($e->getMessage()); killme(); diff --git a/src/Protocol/FKOAuth1.php b/src/Protocol/FKOAuth1.php index 5d0e9e52bf..710097ae00 100644 --- a/src/Protocol/FKOAuth1.php +++ b/src/Protocol/FKOAuth1.php @@ -29,19 +29,22 @@ class FKOAuth1 extends OAuthServer $this->add_signature_method(new OAuthSignatureMethod_HMAC_SHA1()); } - function loginUser($uid) + /** + * @param string $uid user id + * @return void + */ + public static function loginUser($uid) { logger("FKOAuth1::loginUser $uid"); $a = get_app(); - $r = q("SELECT * FROM `user` WHERE uid=%d AND `blocked` = 0 AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 LIMIT 1", - intval($uid) - ); - if (DBM::is_result($r)){ - $record = $r[0]; + $r = dba::select('user', array(), array('uid' => $uid, 'blocked' => 0, 'account_expired' => 0, 'account_removed' => 0, 'verified' => 1), array('limit' => 1)); + + if (DBM::is_result($r)) { + $record = $r; } else { - logger('FKOAuth1::loginUser failure: ' . print_r($_SERVER,true), LOGGER_DEBUG); - header('HTTP/1.0 401 Unauthorized'); - die('This api requires login'); + logger('FKOAuth1::loginUser failure: ' . print_r($_SERVER, true), LOGGER_DEBUG); + header('HTTP/1.0 401 Unauthorized'); + die('This api requires login'); } $_SESSION['uid'] = $record['uid']; $_SESSION['theme'] = $record['theme']; @@ -52,7 +55,6 @@ class FKOAuth1 extends OAuthServer $_SESSION['addr'] = $_SERVER['REMOTE_ADDR']; $_SESSION["allow_api"] = true; - //notice( t("Welcome back ") . $record['username'] . EOL); $a->user = $record; if (strlen($a->user['timezone'])) { @@ -60,14 +62,15 @@ class FKOAuth1 extends OAuthServer $a->timezone = $a->user['timezone']; } - $r = q("SELECT * FROM `contact` WHERE `uid` = %s AND `self` = 1 LIMIT 1", - intval($_SESSION['uid'])); + $r = dba::select('contact', array(), array('uid' => $_SESSION['uid'], 'self' => 1), array('limit' => 1)); + if (DBM::is_result($r)) { - $a->contact = $r[0]; - $a->cid = $r[0]['id']; + $a->contact = $r; + $a->cid = $r['id']; $_SESSION['cid'] = $a->cid; } - q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d", + + dba::q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d", dbesc(datetime_convert()), intval($_SESSION['uid']) ); diff --git a/src/Protocol/FKOAuthDataStore.php b/src/Protocol/FKOAuthDataStore.php index 08c32df213..dc4b774b9b 100644 --- a/src/Protocol/FKOAuthDataStore.php +++ b/src/Protocol/FKOAuthDataStore.php @@ -24,18 +24,24 @@ require_once "library/oauth2-php/lib/OAuth2.inc"; */ class FKOAuthDataStore extends OAuthDataStore { - function gen_token() + /** + * @return string + */ + private static function genToken() { return md5(base64_encode(pack('N6', mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand(), uniqid()))); } - function lookup_consumer($consumer_key) + /** + * @param string $consumer_key key + * @return mixed + */ + public static function lookup_consumer($consumer_key) { logger(__function__.":".$consumer_key); - $r = q("SELECT client_id, pw, redirect_uri FROM clients WHERE client_id='%s'", - dbesc($consumer_key) - ); + $s = dba::select('clients', array('client_id', 'pw', 'redirect_uri'), array('client_id' => $consumer_key)); + $r = dba::inArray($r); if (DBM::is_result($r)) { return new OAuthConsumer($r[0]['client_id'], $r[0]['pw'], $r[0]['redirect_uri']); @@ -44,32 +50,41 @@ class FKOAuthDataStore extends OAuthDataStore return null; } - function lookup_token($consumer, $token_type, $token) + /** + * @param string $consumer consumer + * @param string $token_type type + * @param string $token token + * @return mixed + */ + public static function lookup_token($consumer, $token_type, $token) { logger(__function__.":".$consumer.", ". $token_type.", ".$token); - $r = q("SELECT id, secret,scope, expires, uid FROM tokens WHERE client_id='%s' AND scope='%s' AND id='%s'", - dbesc($consumer->key), - dbesc($token_type), - dbesc($token) - ); + + $s = dba::select('tokens', array('id', 'secret', 'scope', 'expires', 'uid'), array('client_id' => $consumer->key, 'scope' => $token_type, 'id' => $token)); + $r = dba::inArray($s); + if (DBM::is_result($r)) { $ot=new OAuthToken($r[0]['id'], $r[0]['secret']); - $ot->scope=$r[0]['scope']; + $ot->scope = $r[0]['scope']; $ot->expires = $r[0]['expires']; $ot->uid = $r[0]['uid']; return $ot; } + return null; } - function lookup_nonce($consumer, $token, $nonce, $timestamp) + /** + * @param string $consumer consumer + * @param string $token token + * @param string $nonce nonce + * @param string $timestamp timestamp + * @return mixed + */ + public static function lookup_nonce($consumer, $token, $nonce, $timestamp) { - //echo __file__.":".__line__."
"; var_dump($consumer,$key); killme();
-		$r = q("SELECT id, secret  FROM tokens WHERE client_id='%s' AND id='%s' AND expires=%d",
-			dbesc($consumer->key),
-			dbesc($nonce),
-			intval($timestamp)
-		);
+		$s = dba::select('tokens', array('id', 'secret'), array('client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp));
+		$r = dba::inArray($s);
 		
 		if (DBM::is_result($r)) {
 			return new OAuthToken($r[0]['id'], $r[0]['secret']);
@@ -78,11 +93,16 @@ class FKOAuthDataStore extends OAuthDataStore
 		return null;
 	}
 
-	function new_request_token($consumer, $callback = null)
+	/**
+	 * @param string $consumer consumer
+	 * @param string $callback optional, default null
+	 * @return mixed
+	 */
+	public static function new_request_token($consumer, $callback = null)
 	{
 		logger(__function__.":".$consumer.", ". $callback);
-		$key = $this->gen_token();
-		$sec = $this->gen_token();
+		$key = self::genToken();
+		$sec = self::genToken();
 
 		if ($consumer->key) {
 			$k = $consumer->key;
@@ -90,12 +110,14 @@ class FKOAuthDataStore extends OAuthDataStore
 			$k = $consumer;
 		}
 
-		$r = q("INSERT INTO tokens (id, secret, client_id, scope, expires) VALUES ('%s','%s','%s','%s', UNIX_TIMESTAMP()+%d)",
-			dbesc($key),
-			dbesc($sec),
-			dbesc($k),
-			'request',
-			intval(REQUEST_TOKEN_DURATION)
+		$r = dba::insert(
+			'tokens',
+			array(
+				'id' => $key,
+				'secret' => $sec,
+				'client_id' => $k,
+				'scope' => 'request',
+				'expires' => UNIX_TIMESTAMP() + REQUEST_TOKEN_DURATION)
 		);
 
 		if (!$r) {
@@ -105,7 +127,13 @@ class FKOAuthDataStore extends OAuthDataStore
 		return new OAuthToken($key, $sec);
 	}
 
-	function new_access_token($token, $consumer, $verifier = null)
+	/**
+	 * @param string $token    token
+	 * @param string $consumer consumer
+	 * @param string $verifier optional, defult null
+	 * @return object
+	 */
+	public static function new_access_token($token, $consumer, $verifier = null)
 	{
 		logger(__function__.":".$token.", ". $consumer.", ". $verifier);
 
@@ -121,15 +149,17 @@ class FKOAuthDataStore extends OAuthDataStore
 		logger(__function__.":".$verifier.",".$uverifier);
 
 		if (is_null($verifier) || ($uverifier!==false)) {
-			$key = $this->gen_token();
-			$sec = $this->gen_token();
-			$r = q("INSERT INTO tokens (id, secret, client_id, scope, expires, uid) VALUES ('%s','%s','%s','%s', UNIX_TIMESTAMP()+%d, %d)",
-				dbesc($key),
-				dbesc($sec),
-				dbesc($consumer->key),
-				'access',
-				intval(ACCESS_TOKEN_DURATION),
-				intval($uverifier)
+			$key = self::genToken();
+			$sec = self::genToken();
+			$r = dba::insert(
+				'tokens',
+				array(
+					'id' => $key,
+					'secret' => $sec,
+					'client_id' => $consumer->key,
+					'scope' => 'access',
+					'expires' => UNIX_TIMESTAMP() + ACCESS_TOKEN_DURATION,
+					'uid' => $uverifier)
 			);
 
 			if ($r) {