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
parent 6f17eae3f9
commit 40fef8e632
2 changed files with 14 additions and 2 deletions

View file

@ -14,7 +14,7 @@ def render("show.json", _) 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 @@ test "get instance information", %{conn: conn} 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 @@ test "get instance information", %{conn: conn} 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})