]> git.mxchange.org Git - friendica.git/blobdiff - src/Security/OAuth.php
Use ISO-639-1 for the language detection
[friendica.git] / src / Security / OAuth.php
index 27a3dfa11b2328f83c1cc60f6b86dfe98bafd6e0..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
@@ -110,7 +111,7 @@ class OAuth
                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]) {