]> git.mxchange.org Git - friendica.git/blobdiff - src/Network/FKOAuthDataStore.php
Merge pull request #8265 from nupplaphil/task/add_license
[friendica.git] / src / Network / FKOAuthDataStore.php
index d7fa14518903b981bb8cbf0f470ee13faf5a8f19..ee9a70915270e3d3e2aa6be0790384133a9e7533 100644 (file)
@@ -1,50 +1,64 @@
 <?php
 /**
- * @file src/Protocol/FKOAuthDataStore.php
- * OAuth server
- * Based on oauth2-php <http://code.google.com/p/oauth2-php/>
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  *
  */
+
 namespace Friendica\Network;
 
-use Friendica\App;
-use Friendica\Core\Config;
-use Friendica\Core\System;
-use Friendica\Database\DBM;
-use dba;
+use Friendica\Core\Logger;
+use Friendica\Database\DBA;
+use Friendica\DI;
+use Friendica\Util\Strings;
+use OAuthConsumer;
 use OAuthDataStore;
+use OAuthToken;
 
 define('REQUEST_TOKEN_DURATION', 300);
 define('ACCESS_TOKEN_DURATION', 31536000);
 
-require_once "library/OAuth1.php";
-require_once "library/oauth2-php/lib/OAuth2.inc";
-
 /**
- * @brief OAuthDataStore class
+ * OAuthDataStore class
  */
 class FKOAuthDataStore extends OAuthDataStore
 {
        /**
         * @return string
+        * @throws \Exception
         */
        private static function genToken()
        {
-               return md5(base64_encode(pack('N6', mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand(), uniqid())));
+               return Strings::getRandomHex(32);
        }
 
        /**
         * @param string $consumer_key key
-        * @return mixed
+        * @return OAuthConsumer|null
+        * @throws \Exception
         */
        public function lookup_consumer($consumer_key)
        {
-               logger(__function__.":".$consumer_key);
-               
-               $s = dba::select('clients', array('client_id', 'pw', 'redirect_uri'), array('client_id' => $consumer_key));
-               $r = dba::inArray($r);
+               Logger::log(__function__ . ":" . $consumer_key);
 
-               if (DBM::is_result($r)) {
+               $s = DBA::select('clients', ['client_id', 'pw', 'redirect_uri'], ['client_id' => $consumer_key]);
+               $r = DBA::toArray($s);
+
+               if (DBA::isResult($r)) {
                        return new OAuthConsumer($r[0]['client_id'], $r[0]['pw'], $r[0]['redirect_uri']);
                }
 
@@ -52,20 +66,21 @@ class FKOAuthDataStore extends OAuthDataStore
        }
 
        /**
-        * @param string $consumer   consumer
-        * @param string $token_type type
-        * @param string $token      token
-        * @return mixed
+        * @param OAuthConsumer $consumer
+        * @param string        $token_type
+        * @param string        $token_id
+        * @return OAuthToken|null
+        * @throws \Exception
         */
-       public function lookup_token($consumer, $token_type, $token)
+       public function lookup_token(OAuthConsumer $consumer, $token_type, $token_id)
        {
-               logger(__function__.":".$consumer.", ". $token_type.", ".$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);
+               Logger::log(__function__ . ":" . $consumer . ", " . $token_type . ", " . $token_id);
+
+               $s = DBA::select('tokens', ['id', 'secret', 'scope', 'expires', 'uid'], ['client_id' => $consumer->key, 'scope' => $token_type, 'id' => $token_id]);
+               $r = DBA::toArray($s);
 
-               if (DBM::is_result($r)) {
-                       $ot=new OAuthToken($r[0]['id'], $r[0]['secret']);
+               if (DBA::isResult($r)) {
+                       $ot = new OAuthToken($r[0]['id'], $r[0]['secret']);
                        $ot->scope = $r[0]['scope'];
                        $ot->expires = $r[0]['expires'];
                        $ot->uid = $r[0]['uid'];
@@ -76,31 +91,32 @@ class FKOAuthDataStore extends OAuthDataStore
        }
 
        /**
-        * @param string $consumer  consumer
-        * @param string $token     token
-        * @param string $nonce     nonce
-        * @param string $timestamp timestamp
+        * @param OAuthConsumer $consumer
+        * @param OAuthToken    $token
+        * @param string        $nonce
+        * @param int           $timestamp
         * @return mixed
+        * @throws \Exception
         */
-       public function lookup_nonce($consumer, $token, $nonce, $timestamp)
+       public function lookup_nonce(OAuthConsumer $consumer, OAuthToken $token, $nonce, int $timestamp)
        {
-               $r = dba::select('tokens', ['id', 'secret'], ['client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp], ['limit' => 1]);
-                               
-               if (DBM::is_result($r)) {
-                       return new OAuthToken($r['id'], $r['secret']);
+               $token = DBA::selectFirst('tokens', ['id', 'secret'], ['client_id' => $consumer->key, 'id' => $nonce, 'expires' => $timestamp]);
+               if (DBA::isResult($token)) {
+                       return new OAuthToken($token['id'], $token['secret']);
                }
 
                return null;
        }
 
        /**
-        * @param string $consumer consumer
-        * @param string $callback optional, default null
-        * @return mixed
+        * @param OAuthConsumer $consumer
+        * @param string        $callback
+        * @return OAuthToken|null
+        * @throws \Exception
         */
-       public function new_request_token($consumer, $callback = null)
+       public function new_request_token(OAuthConsumer $consumer, $callback = null)
        {
-               logger(__function__.":".$consumer.", ". $callback);
+               Logger::log(__function__ . ":" . $consumer . ", " . $callback);
                $key = self::genToken();
                $sec = self::genToken();
 
@@ -110,14 +126,15 @@ class FKOAuthDataStore extends OAuthDataStore
                        $k = $consumer;
                }
 
-               $r = dba::insert(
+               $r = DBA::insert(
                        'tokens',
-                       array(
+                       [
                                'id' => $key,
                                'secret' => $sec,
                                'client_id' => $k,
                                'scope' => 'request',
-                               'expires' => UNIX_TIMESTAMP() + REQUEST_TOKEN_DURATION)
+                               'expires' => time() + REQUEST_TOKEN_DURATION
+                       ]
                );
 
                if (!$r) {
@@ -128,14 +145,15 @@ class FKOAuthDataStore extends OAuthDataStore
        }
 
        /**
-        * @param string $token    token
-        * @param string $consumer consumer
-        * @param string $verifier optional, defult null
-        * @return object
+        * @param OAuthToken    $token    token
+        * @param OAuthConsumer $consumer consumer
+        * @param string        $verifier optional, defult null
+        * @return OAuthToken
+        * @throws \Exception
         */
-       public function new_access_token($token, $consumer, $verifier = null)
+       public function new_access_token(OAuthToken $token, OAuthConsumer $consumer, $verifier = null)
        {
-               logger(__function__.":".$token.", ". $consumer.", ". $verifier);
+               Logger::log(__function__ . ":" . $token . ", " . $consumer . ", " . $verifier);
 
                // return a new access token attached to this consumer
                // for the user associated with this token if the request token
@@ -145,21 +163,22 @@ class FKOAuthDataStore extends OAuthDataStore
                $ret = null;
 
                // get user for this verifier
-               $uverifier = Config::get("oauth", $verifier);
-               logger(__function__.":".$verifier.",".$uverifier);
+               $uverifier = DI::config()->get("oauth", $verifier);
+               Logger::log(__function__ . ":" . $verifier . "," . $uverifier);
 
-               if (is_null($verifier) || ($uverifier!==false)) {
+               if (is_null($verifier) || ($uverifier !== false)) {
                        $key = self::genToken();
                        $sec = self::genToken();
-                       $r = dba::insert(
+                       $r = DBA::insert(
                                'tokens',
-                               array(
+                               [
                                        'id' => $key,
                                        'secret' => $sec,
                                        'client_id' => $consumer->key,
                                        'scope' => 'access',
-                                       'expires' => UNIX_TIMESTAMP() + ACCESS_TOKEN_DURATION,
-                                       'uid' => $uverifier)
+                                       'expires' => time() + ACCESS_TOKEN_DURATION,
+                                       'uid' => $uverifier
+                               ]
                        );
 
                        if ($r) {
@@ -167,12 +186,10 @@ class FKOAuthDataStore extends OAuthDataStore
                        }
                }
 
-
-               dba::delete('tokens', array('id' => $token->key));
-
+               DBA::delete('tokens', ['id' => $token->key]);
 
                if (!is_null($ret) && !is_null($uverifier)) {
-                       Config::delete("oauth", $verifier);
+                       DI::config()->delete("oauth", $verifier);
                }
 
                return $ret;