api/masto/instance: use WebFinger domain for URI
All checks were successful
ci/woodpecker/pr/lint Pipeline was successful
ci/woodpecker/pr/test/2 Pipeline was successful
ci/woodpecker/pr/test/1 Pipeline was successful
ci/woodpecker/pr/build-arm64 Pipeline was successful
ci/woodpecker/pr/build-amd64 Pipeline was successful
ci/woodpecker/pr/docs Pipeline was successful
ci/woodpecker/pull_request_closed/lint Pipeline was successful
ci/woodpecker/pull_request_closed/test/1 Pipeline was successful
ci/woodpecker/pull_request_closed/test/2 Pipeline was successful
ci/woodpecker/pull_request_closed/build-arm64 Pipeline was successful
ci/woodpecker/pull_request_closed/build-amd64 Pipeline was successful
ci/woodpecker/pull_request_closed/docs Pipeline was successful

Despite its name this property is not supposed to be a full URI,
but just a bare domain witout protocol. Furthermore, it’s supposed
to be the WebFinger domain used in userhandles and NOT the domain used
for API and ActivityPub objects (which every caller will already know
anyway).

Not following this caused issues for Pachli and Tusky.

Reported-by: nikclayton
This commit is contained in:
Oneric 2025-05-15 21:01:49 +02:00
commit 40fef8e632
2 changed files with 14 additions and 2 deletions

View file

@ -14,7 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do
instance = Config.get(:instance)
%{
uri: Pleroma.Web.Endpoint.url(),
uri: Pleroma.Web.WebFinger.domain(),
title: Keyword.get(instance, :name),
description: Keyword.get(instance, :description),
short_description:

View file

@ -18,9 +18,12 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do
thumbnail = Pleroma.Web.Endpoint.url() <> Pleroma.Config.get([:instance, :instance_thumbnail])
background = Pleroma.Web.Endpoint.url() <> Pleroma.Config.get([:instance, :background_image])
# if no WebFinger domain is configured (without protocol)
uri = Pleroma.Web.Endpoint.host()
# Note: not checking for "max_toot_chars" since it's optional
assert %{
"uri" => _,
"uri" => ^uri,
"title" => _,
"description" => _,
"short_description" => _,
@ -55,6 +58,15 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do
assert background == from_config_background
end
test "get instance information prefers WebFinger domain for uri", %{conn: conn} do
webfinger_domain = "webfinger.example"
clear_config([Pleroma.Web.WebFinger, :domain], webfinger_domain)
conn = get(conn, "/api/v1/instance")
assert result = json_response_and_validate_schema(conn, 200)
assert match?(%{"uri" => ^webfinger_domain}, result)
end
test "get instance stats", %{conn: conn} do
user = insert(:user, %{local: true})