forked from AkkomaGang/akkoma
Remove webfinger support, these are not properly formatted URIs, more consideration of syntax needs to be done
strip userinfo from URI, if present
This commit is contained in:
parent
44cc0966a0
commit
0f2c707ad1
2 changed files with 18 additions and 37 deletions
|
@ -38,19 +38,12 @@ def handle(%{assigns: %{user: user}} = conn, %{"target" => "web+ap://" <> identi
|
||||||
|
|
||||||
def handle(conn, _), do: conn |> json_response(:bad_request, "Could not handle protocol URL")
|
def handle(conn, _), do: conn |> json_response(:bad_request, "Could not handle protocol URL")
|
||||||
|
|
||||||
# Should webfinger handles even be accepted? They are not ActivityPub URLs
|
|
||||||
defp find_and_redirect(conn, "@" <> identifier) do
|
|
||||||
with {:error, _err} <- User.get_or_fetch(identifier) do
|
|
||||||
conn |> json_response(:not_found, "Not Found - @#{identifier}")
|
|
||||||
else
|
|
||||||
{:ok, %User{} = found_user} -> conn |> redirect(to: "/users/#{found_user.id}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
defp find_and_redirect(%{assigns: %{user: user}} = conn, identifier) do
|
defp find_and_redirect(%{assigns: %{user: user}} = conn, identifier) do
|
||||||
with {:error, _err} <- User.get_or_fetch("https://" <> identifier),
|
# Remove userinfo if present (username:password@)
|
||||||
[] <- DatabaseSearch.maybe_fetch([], user, "https://" <> identifier) do
|
cleaned = String.replace(identifier, ~r/^[^\/]*?@/, "")
|
||||||
conn |> json_response(:not_found, "Not Found - #{identifier}")
|
with {:error, _err} <- User.get_or_fetch("https://" <> cleaned),
|
||||||
|
[] <- DatabaseSearch.maybe_fetch([], user, "https://" <> cleaned) do
|
||||||
|
conn |> json_response(:not_found, "Not Found - #{cleaned}")
|
||||||
else
|
else
|
||||||
{:ok, %User{} = found_user} -> conn |> redirect(to: "/users/#{found_user.id}")
|
{:ok, %User{} = found_user} -> conn |> redirect(to: "/users/#{found_user.id}")
|
||||||
|
|
||||||
|
|
|
@ -42,18 +42,6 @@ test "should return bad_request when target prefix has unknown protocol" do
|
||||||
assert resp =~ "Could not handle protocol URL"
|
assert resp =~ "Could not handle protocol URL"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should return forbidden for unauthed user when target is webfinger handle" do
|
|
||||||
clear_config([Pleroma.Web.Endpoint, :url, :host], "sub.example.com")
|
|
||||||
%{conn: conn} = oauth_access([])
|
|
||||||
|
|
||||||
resp =
|
|
||||||
conn
|
|
||||||
|> get("/api/v1/akkoma/protocol-handler?target=web%2Bap%3A%2F%2F%40akkoma%40ihatebeinga.live")
|
|
||||||
|> json_response(403)
|
|
||||||
|
|
||||||
assert resp =~ "Invalid credentials."
|
|
||||||
end
|
|
||||||
|
|
||||||
test "should return forbidden for unauthed user when target is remote" do
|
test "should return forbidden for unauthed user when target is remote" do
|
||||||
clear_config([Pleroma.Web.Endpoint, :url, :host], "sub.example.com")
|
clear_config([Pleroma.Web.Endpoint, :url, :host], "sub.example.com")
|
||||||
%{conn: conn} = oauth_access([])
|
%{conn: conn} = oauth_access([])
|
||||||
|
@ -118,19 +106,6 @@ test "should return redirect for unauthed user when target is local AP ID for no
|
||||||
assert resp =~ "<a href=\"/notice/#{activity.id}\">"
|
assert resp =~ "<a href=\"/notice/#{activity.id}\">"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should return redirect for authed user when target is webfinger handle" do
|
|
||||||
%{conn: conn} = oauth_access(["read:search"])
|
|
||||||
remote_user = insert(:user, %{nickname: "akkoma@ihatebeinga.live", local: false})
|
|
||||||
|
|
||||||
resp =
|
|
||||||
conn
|
|
||||||
|> get("/api/v1/akkoma/protocol-handler?target=web%2Bap%3A%2F%2F%40akkoma%40ihatebeinga.live")
|
|
||||||
|> html_response(302)
|
|
||||||
|
|
||||||
assert resp =~ "You are being"
|
|
||||||
assert resp =~ "<a href=\"/users/#{remote_user.id}\">"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "should return redirect for authed user when target is AP ID for user" do
|
test "should return redirect for authed user when target is AP ID for user" do
|
||||||
%{conn: conn} = oauth_access(["read:search"])
|
%{conn: conn} = oauth_access(["read:search"])
|
||||||
remote_user = insert(:user, %{nickname: "akkoma@ihatebeinga.live", local: false, ap_id: "https://ihatebeinga.live/users/akkoma"})
|
remote_user = insert(:user, %{nickname: "akkoma@ihatebeinga.live", local: false, ap_id: "https://ihatebeinga.live/users/akkoma"})
|
||||||
|
@ -144,6 +119,19 @@ test "should return redirect for authed user when target is AP ID for user" do
|
||||||
assert resp =~ "<a href=\"/users/#{remote_user.id}\">"
|
assert resp =~ "<a href=\"/users/#{remote_user.id}\">"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "should return redirect for authed user when target is AP ID for user, stripping userinfo" do
|
||||||
|
%{conn: conn} = oauth_access(["read:search"])
|
||||||
|
remote_user = insert(:user, %{nickname: "akkoma@ihatebeinga.live", local: false, ap_id: "https://ihatebeinga.live/users/akkoma"})
|
||||||
|
|
||||||
|
resp =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/akkoma/protocol-handler?target=web%2Bap%3A%2F%2Fusername%3Apassword%40ihatebeinga.live/users/akkoma")
|
||||||
|
|> html_response(302)
|
||||||
|
|
||||||
|
assert resp =~ "You are being"
|
||||||
|
assert resp =~ "<a href=\"/users/#{remote_user.id}\">"
|
||||||
|
end
|
||||||
|
|
||||||
test "should return redirect for authed user when target is AP ID for note activity" do
|
test "should return redirect for authed user when target is AP ID for note activity" do
|
||||||
Tesla.Mock.mock(fn
|
Tesla.Mock.mock(fn
|
||||||
%{method: :get, url: "https://mastodon.social/users/emelie/statuses/101849165031453009"} ->
|
%{method: :get, url: "https://mastodon.social/users/emelie/statuses/101849165031453009"} ->
|
||||||
|
|
Loading…
Reference in a new issue