From 3af9692352a54f6f85d5c9b7eeba00bca605db69 Mon Sep 17 00:00:00 2001 From: Moon Man Date: Thu, 20 Mar 2025 15:25:00 +0000 Subject: [PATCH 1/5] return json if no accept is specified --- lib/pleroma/web/web_finger/web_finger_controller.ex | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/pleroma/web/web_finger/web_finger_controller.ex b/lib/pleroma/web/web_finger/web_finger_controller.ex index 021df9bc5..0a9ee2d3b 100644 --- a/lib/pleroma/web/web_finger/web_finger_controller.ex +++ b/lib/pleroma/web/web_finger/web_finger_controller.ex @@ -41,5 +41,17 @@ defmodule Pleroma.Web.WebFinger.WebFingerController do end end + # Default to JSON when no format is specified or format is not recognized + def webfinger(%{assigns: %{format: _format}} = conn, %{"resource" => resource}) do + with {:ok, response} <- WebFinger.webfinger(resource, "JSON") do + json(conn, response) + else + _e -> + conn + |> put_status(404) + |> json("Couldn't find user") + end + end + def webfinger(conn, _params), do: send_resp(conn, 400, "Bad Request") end From edfa372fdb572e429c28c4346dc7c8ccb1d342c7 Mon Sep 17 00:00:00 2001 From: Moon Man Date: Thu, 20 Mar 2025 15:30:41 +0000 Subject: [PATCH 2/5] changelog update --- changelog.d/webfinger.change | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/webfinger.change diff --git a/changelog.d/webfinger.change b/changelog.d/webfinger.change new file mode 100644 index 000000000..353e65a89 --- /dev/null +++ b/changelog.d/webfinger.change @@ -0,0 +1 @@ +Don't require an Accept header for WebFinger queries and default to JSON. \ No newline at end of file From 7624af92cf95b8ae17bff59c2327853eb606b26d Mon Sep 17 00:00:00 2001 From: Moon Man Date: Thu, 20 Mar 2025 16:42:46 +0000 Subject: [PATCH 3/5] tests for webfinger --- .../web_finger/web_finger_controller_test.exs | 46 +++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/test/pleroma/web/web_finger/web_finger_controller_test.exs b/test/pleroma/web/web_finger/web_finger_controller_test.exs index 80e072163..b89849e68 100644 --- a/test/pleroma/web/web_finger/web_finger_controller_test.exs +++ b/test/pleroma/web/web_finger/web_finger_controller_test.exs @@ -55,6 +55,26 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do ] end + test "Webfinger defaults to JSON when no Accept header is provided" do + user = + insert(:user, + ap_id: "https://hyrule.world/users/zelda", + also_known_as: ["https://mushroom.kingdom/users/toad"] + ) + + response = + build_conn() + |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") + |> json_response(200) + + assert response["subject"] == "acct:#{user.nickname}@localhost" + + assert response["aliases"] == [ + "https://hyrule.world/users/zelda", + "https://mushroom.kingdom/users/toad" + ] + end + test "reach user on tld, while pleroma is running on subdomain" do clear_config([Pleroma.Web.Endpoint, :url, :host], "sub.example.com") @@ -109,16 +129,24 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do assert result == "Couldn't find user" end - test "Sends a 404 when invalid format" do - user = insert(:user) + test "Returns JSON when format is not supported" do + user = + insert(:user, + ap_id: "https://hyrule.world/users/zelda", + also_known_as: ["https://mushroom.kingdom/users/toad"] + ) - assert capture_log(fn -> - assert_raise Phoenix.NotAcceptableError, fn -> - build_conn() - |> put_req_header("accept", "text/html") - |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") - end - end) =~ "no supported media type in accept header" + response = + build_conn() + |> put_req_header("accept", "text/html") + |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") + |> json_response(200) + + assert response["subject"] == "acct:#{user.nickname}@localhost" + assert response["aliases"] == [ + "https://hyrule.world/users/zelda", + "https://mushroom.kingdom/users/toad" + ] end test "Sends a 400 when resource param is missing" do From 43a124bb14d385382c8b16da7d229d9ec7cd1205 Mon Sep 17 00:00:00 2001 From: Moon Man Date: Thu, 20 Mar 2025 12:51:43 -0400 Subject: [PATCH 4/5] formatting --- test/pleroma/web/web_finger/web_finger_controller_test.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/pleroma/web/web_finger/web_finger_controller_test.exs b/test/pleroma/web/web_finger/web_finger_controller_test.exs index b89849e68..d60e8a585 100644 --- a/test/pleroma/web/web_finger/web_finger_controller_test.exs +++ b/test/pleroma/web/web_finger/web_finger_controller_test.exs @@ -143,6 +143,7 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do |> json_response(200) assert response["subject"] == "acct:#{user.nickname}@localhost" + assert response["aliases"] == [ "https://hyrule.world/users/zelda", "https://mushroom.kingdom/users/toad" From 374e8c85a789d401ceb42567f4c5030124f261f3 Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 29 May 2025 08:17:31 +0000 Subject: [PATCH 5/5] Apply lambadalambda's suggestion(s) to 1 file(s) --- lib/pleroma/web/web_finger/web_finger_controller.ex | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/web/web_finger/web_finger_controller.ex b/lib/pleroma/web/web_finger/web_finger_controller.ex index 0a9ee2d3b..8a291e28e 100644 --- a/lib/pleroma/web/web_finger/web_finger_controller.ex +++ b/lib/pleroma/web/web_finger/web_finger_controller.ex @@ -42,15 +42,8 @@ defmodule Pleroma.Web.WebFinger.WebFingerController do end # Default to JSON when no format is specified or format is not recognized - def webfinger(%{assigns: %{format: _format}} = conn, %{"resource" => resource}) do - with {:ok, response} <- WebFinger.webfinger(resource, "JSON") do - json(conn, response) - else - _e -> - conn - |> put_status(404) - |> json("Couldn't find user") - end + def webfinger(%{assigns: %{format: _format}} = conn, %{"resource" => _resource} = params) do + webfinger(put_in(conn.assigns.format, "json"), params) end def webfinger(conn, _params), do: send_resp(conn, 400, "Bad Request")