Handle webfinger JSON data being invalid format
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
0ebb797740
commit
28f5cdd03a
|
@ -129,6 +129,7 @@ defmodule Mobilizon.Federation.WebFinger do
|
||||||
| :address_invalid
|
| :address_invalid
|
||||||
| :http_error
|
| :http_error
|
||||||
| :webfinger_information_not_json
|
| :webfinger_information_not_json
|
||||||
|
| :webfinger_information_not_valid
|
||||||
| :no_url_in_webfinger_data
|
| :no_url_in_webfinger_data
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
@ -164,7 +165,9 @@ defmodule Mobilizon.Federation.WebFinger do
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec fetch_webfinger_data(String.t()) ::
|
@spec fetch_webfinger_data(String.t()) ::
|
||||||
{:ok, map()} | {:error, :webfinger_information_not_json | :http_error}
|
{:ok, map()}
|
||||||
|
| {:error,
|
||||||
|
:webfinger_information_not_json | :webfinger_information_not_valid | :http_error}
|
||||||
defp fetch_webfinger_data(address) do
|
defp fetch_webfinger_data(address) do
|
||||||
Logger.debug("Calling WebfingerClient with #{inspect(address)}")
|
Logger.debug("Calling WebfingerClient with #{inspect(address)}")
|
||||||
|
|
||||||
|
@ -243,28 +246,36 @@ defmodule Mobilizon.Federation.WebFinger do
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec webfinger_from_json(map() | String.t()) ::
|
@spec webfinger_from_json(map() | String.t()) ::
|
||||||
{:ok, map()} | {:error, :webfinger_information_not_json}
|
{:ok, map()}
|
||||||
|
| {:error, :webfinger_information_not_json | :webfinger_information_not_valid}
|
||||||
defp webfinger_from_json(doc) when is_map(doc) do
|
defp webfinger_from_json(doc) when is_map(doc) do
|
||||||
data =
|
links = Map.get(doc, "links")
|
||||||
Enum.reduce(doc["links"], %{"subject" => doc["subject"]}, fn link, data ->
|
subject = Map.get(doc, "subject")
|
||||||
case {link["type"], link["rel"]} do
|
|
||||||
{"application/activity+json", "self"} ->
|
|
||||||
Map.put(data, "url", link["href"])
|
|
||||||
|
|
||||||
{nil, _rel} ->
|
if !is_nil(links) && !is_nil(subject) do
|
||||||
Logger.debug("No type declared for the following link #{inspect(link)}")
|
data =
|
||||||
data
|
Enum.reduce(links, %{"subject" => subject}, fn link, data ->
|
||||||
|
case {link["type"], link["rel"]} do
|
||||||
|
{"application/activity+json", "self"} ->
|
||||||
|
Map.put(data, "url", link["href"])
|
||||||
|
|
||||||
_ ->
|
{nil, _rel} ->
|
||||||
Logger.debug(fn ->
|
Logger.debug("No type declared for the following link #{inspect(link)}")
|
||||||
"Unhandled type to finger: #{inspect(link["type"])}"
|
data
|
||||||
end)
|
|
||||||
|
|
||||||
data
|
_ ->
|
||||||
end
|
Logger.debug(fn ->
|
||||||
end)
|
"Unhandled type to finger: #{inspect(link)}"
|
||||||
|
end)
|
||||||
|
|
||||||
{:ok, data}
|
data
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
{:ok, data}
|
||||||
|
else
|
||||||
|
{:error, :webfinger_information_not_valid}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp webfinger_from_json(_doc), do: {:error, :webfinger_information_not_json}
|
defp webfinger_from_json(_doc), do: {:error, :webfinger_information_not_json}
|
||||||
|
|
Loading…
Reference in a new issue