Browse Source

Webfinger: Handle bogus ids better.

message-debug-mode
lain 3 years ago
parent
commit
112bec5225
2 changed files with 19 additions and 10 deletions
  1. +14
    -10
      lib/pleroma/web/web_finger/web_finger.ex
  2. +5
    -0
      test/web/web_finger/web_finger_test.exs

+ 14
- 10
lib/pleroma/web/web_finger/web_finger.ex View File

@@ -149,6 +149,18 @@ defmodule Pleroma.Web.WebFinger do
end
end

defp get_address_from_domain(domain, encoded_account) when is_binary(domain) do
case find_lrdd_template(domain) do
{:ok, template} ->
String.replace(template, "{uri}", encoded_account)

_ ->
"https://#{domain}/.well-known/webfinger?resource=#{encoded_account}"
end
end

defp get_address_from_domain(_, _), do: nil

@spec finger(String.t()) :: {:ok, map()} | {:error, any()}
def finger(account) do
account = String.trim_leading(account, "@")
@@ -163,16 +175,8 @@ defmodule Pleroma.Web.WebFinger do

encoded_account = URI.encode("acct:#{account}")

address =
case find_lrdd_template(domain) do
{:ok, template} ->
String.replace(template, "{uri}", encoded_account)

_ ->
"https://#{domain}/.well-known/webfinger?resource=#{encoded_account}"
end

with response <-
with address when is_binary(address) <- get_address_from_domain(domain, encoded_account),
response <-
HTTP.get(
address,
[{"accept", "application/xrd+xml,application/jrd+json"}]


+ 5
- 0
test/web/web_finger/web_finger_test.exs View File

@@ -40,6 +40,11 @@ defmodule Pleroma.Web.WebFingerTest do
end

describe "fingering" do
test "returns error for nonsensical input" do
assert {:error, _} = WebFinger.finger("bliblablu")
assert {:error, _} = WebFinger.finger("pleroma.social")
end

test "returns error when fails parse xml or json" do
user = "invalid_content@social.heldscal.la"
assert {:error, %Jason.DecodeError{}} = WebFinger.finger(user)


Loading…
Cancel
Save