]> git.mxchange.org Git - friendica.git/blobdiff - src/Security/OAuth.php
Merge remote-tracking branch 'upstream/develop' into user-defined-channels
[friendica.git] / src / Security / OAuth.php
index eb4f68b7fd33bdf0c689a76eb4253707a85a489f..7655398b35118a96fcfbddd3d8e4ec359c25dea4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -29,6 +29,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\User;
 use Friendica\Module\BaseApi;
 use Friendica\Util\DateTimeFormat;
+use GuzzleHttp\Psr7\Uri;
 
 /**
  * OAuth Server
@@ -104,13 +105,13 @@ class OAuth
                }
                Logger::debug('Token found', $token);
 
-//             User::updateLastActivity($token['uid']);
+               User::updateLastActivity($token['uid']);
 
                // Regularly update suggestions
-//             if (Contact\Relation::areSuggestionsOutdated($token['uid'])) {
-//                     Worker::add(Worker::PRIORITY_MEDIUM, 'UpdateSuggestions', $token['uid']);
-//             }
-               
+               if (Contact\Relation::areSuggestionsOutdated($token['uid'])) {
+                       Worker::add(Worker::PRIORITY_MEDIUM, 'UpdateSuggestions', $token['uid']);
+               }
+
                return $token;
        }
 
@@ -128,8 +129,11 @@ class OAuth
                if (!empty($client_secret)) {
                        $condition['client_secret'] = $client_secret;
                }
+
                if (!empty($redirect_uri)) {
-                       $condition['redirect_uri'] = $redirect_uri;
+                       $uri = new Uri($redirect_uri);
+                       $redirect_uri = $uri->getScheme() . '://' . $uri->getHost() . $uri->getPath();
+                       $condition = DBA::mergeConditions($condition, ["`redirect_uri` LIKE ?", '%' . $redirect_uri . '%']);
                }
 
                $application = DBA::selectFirst('application', [], $condition);
@@ -137,6 +141,12 @@ class OAuth
                        Logger::warning('Application not found', $condition);
                        return [];
                }
+
+               // The redirect_uri could contain several URI that are separated by spaces.
+               if (($application['redirect_uri'] != $redirect_uri) && !in_array($redirect_uri, explode(' ', $application['redirect_uri']))) {
+                       return [];
+               }
+
                return $application;
        }
 
@@ -187,7 +197,8 @@ class OAuth
                        'write'          => (stripos($scope, BaseApi::SCOPE_WRITE) !== false),
                        'follow'         => (stripos($scope, BaseApi::SCOPE_FOLLOW) !== false),
                        'push'           => (stripos($scope, BaseApi::SCOPE_PUSH) !== false),
-                       'created_at'     => DateTimeFormat::utcNow()];
+                       'created_at'     => DateTimeFormat::utcNow()
+               ];
 
                foreach ([BaseApi::SCOPE_READ, BaseApi::SCOPE_WRITE, BaseApi::SCOPE_WRITE, BaseApi::SCOPE_PUSH] as $scope) {
                        if ($fields[$scope] && !$application[$scope]) {