aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author諏訪子 <suwako@076.moe>2025-05-25 22:12:35 +0900
committer諏訪子 <suwako@076.moe>2025-05-25 23:52:16 +0900
commitef0729f23e538dd81ff201e32597082c1a0ceea1 (patch)
tree91913266ebf10e306135fb1dbbe595d99572e927
parentb367ab2a6b6882521bb92781e322b03a1745855d (diff)
downloadnextcloud-server-ef0729f23e538dd81ff201e32597082c1a0ceea1.tar.gz
nextcloud-server-ef0729f23e538dd81ff201e32597082c1a0ceea1.zip
fix(settings): change Mastodon only URI to webfinger
Signed-off-by: 諏訪子 <suwako@076.moe>
-rw-r--r--AUTHORS1
-rw-r--r--lib/private/Accounts/AccountManager.php4
-rw-r--r--tests/lib/Accounts/AccountManagerTest.php4
3 files changed, 5 insertions, 4 deletions
diff --git a/AUTHORS b/AUTHORS
index bd861e1011f..8881c9ba26a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -620,6 +620,7 @@
- szaimen <szaimen@e.mail.de>
- tbartenstein <tbartenstein@users.noreply.github.com>
- tbelau666 <thomas.belau@gmx.de>
+ - TechnicalSuwako <suwako@076.moe>
- tgrant <tom.grant760@gmail.com>
- timm2k <timm2k@gmx.de>
- tux-rampage <tux-rampage@users.noreply.github.com>
diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php
index e8b67311636..57322620882 100644
--- a/lib/private/Accounts/AccountManager.php
+++ b/lib/private/Accounts/AccountManager.php
@@ -734,7 +734,7 @@ class AccountManager implements IAccountManager {
try {
// try the public account lookup API of mastodon
- $response = $client->get("https://{$instance}/api/v1/accounts/lookup?acct={$username}@{$instance}");
+ $response = $client->get("https://{$instance}/.well-known/webfinger?resource=acct:{$username}@{$instance}");
// should be a json response with account information
$data = $response->getBody();
if (is_resource($data)) {
@@ -743,7 +743,7 @@ class AccountManager implements IAccountManager {
$decoded = json_decode($data, true);
// ensure the username is the same the user passed
// in this case we can assume this is a valid fediverse server and account
- if (!is_array($decoded) || ($decoded['username'] ?? '') !== $username) {
+ if (!is_array($decoded) || ($decoded['subject'] ?? '') !== "acct:{$username}@{$instance}") {
throw new InvalidArgumentException();
}
} catch (InvalidArgumentException) {
diff --git a/tests/lib/Accounts/AccountManagerTest.php b/tests/lib/Accounts/AccountManagerTest.php
index 05c7efd08fb..7e28cbc9cd8 100644
--- a/tests/lib/Accounts/AccountManagerTest.php
+++ b/tests/lib/Accounts/AccountManagerTest.php
@@ -839,12 +839,12 @@ class AccountManagerTest extends TestCase {
->willReturn($serverResponse);
$client->expects(self::once())
->method('get')
- ->with('https://example.com/api/v1/accounts/lookup?acct=foo@example.com')
+ ->with('https://example.com/.well-known/webfinger?resource=acct:foo@example.com')
->willReturn($response);
} else {
$client->expects(self::once())
->method('get')
- ->with('https://example.com/api/v1/accounts/lookup?acct=foo@example.com')
+ ->with('https://example.com/.well-known/webfinger?resource=acct:foo@example.com')
->willThrowException(new \Exception('404'));
}