|
|
@ -144,31 +144,33 @@ defmodule Pleroma.Web.WebFinger do
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
defp webfinger_from_xml(doc) do
|
|
|
|
defp get_magic_key(magic_key) do
|
|
|
|
magic_key = XML.string_from_xpath(~s{//Link[@rel="magic-public-key"]/@href}, doc)
|
|
|
|
|
|
|
|
"data:application/magic-public-key," <> magic_key = magic_key
|
|
|
|
"data:application/magic-public-key," <> magic_key = magic_key
|
|
|
|
|
|
|
|
{:ok, magic_key}
|
|
|
|
|
|
|
|
rescue
|
|
|
|
|
|
|
|
MatchError -> {:error, "Missing magic key data."}
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
topic =
|
|
|
|
defp webfinger_from_xml(doc) do
|
|
|
|
|
|
|
|
with magic_key <- XML.string_from_xpath(~s{//Link[@rel="magic-public-key"]/@href}, doc),
|
|
|
|
|
|
|
|
{:ok, magic_key} <- get_magic_key(magic_key),
|
|
|
|
|
|
|
|
topic <-
|
|
|
|
XML.string_from_xpath(
|
|
|
|
XML.string_from_xpath(
|
|
|
|
~s{//Link[@rel="http://schemas.google.com/g/2010#updates-from"]/@href},
|
|
|
|
~s{//Link[@rel="http://schemas.google.com/g/2010#updates-from"]/@href},
|
|
|
|
doc
|
|
|
|
doc
|
|
|
|
)
|
|
|
|
),
|
|
|
|
|
|
|
|
subject <- XML.string_from_xpath("//Subject", doc),
|
|
|
|
subject = XML.string_from_xpath("//Subject", doc)
|
|
|
|
salmon <- XML.string_from_xpath(~s{//Link[@rel="salmon"]/@href}, doc),
|
|
|
|
salmon = XML.string_from_xpath(~s{//Link[@rel="salmon"]/@href}, doc)
|
|
|
|
subscribe_address <-
|
|
|
|
|
|
|
|
|
|
|
|
subscribe_address =
|
|
|
|
|
|
|
|
XML.string_from_xpath(
|
|
|
|
XML.string_from_xpath(
|
|
|
|
~s{//Link[@rel="http://ostatus.org/schema/1.0/subscribe"]/@template},
|
|
|
|
~s{//Link[@rel="http://ostatus.org/schema/1.0/subscribe"]/@template},
|
|
|
|
doc
|
|
|
|
doc
|
|
|
|
)
|
|
|
|
),
|
|
|
|
|
|
|
|
ap_id <-
|
|
|
|
ap_id =
|
|
|
|
|
|
|
|
XML.string_from_xpath(
|
|
|
|
XML.string_from_xpath(
|
|
|
|
~s{//Link[@rel="self" and @type="application/activity+json"]/@href},
|
|
|
|
~s{//Link[@rel="self" and @type="application/activity+json"]/@href},
|
|
|
|
doc
|
|
|
|
doc
|
|
|
|
)
|
|
|
|
) do
|
|
|
|
|
|
|
|
|
|
|
|
data = %{
|
|
|
|
data = %{
|
|
|
|
"magic_key" => magic_key,
|
|
|
|
"magic_key" => magic_key,
|
|
|
|
"topic" => topic,
|
|
|
|
"topic" => topic,
|
|
|
@ -179,6 +181,13 @@ defmodule Pleroma.Web.WebFinger do
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
{:ok, data}
|
|
|
|
{:ok, data}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{:error, e} ->
|
|
|
|
|
|
|
|
{:error, e}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e ->
|
|
|
|
|
|
|
|
{:error, e}
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
defp webfinger_from_json(doc) do
|
|
|
|
defp webfinger_from_json(doc) do
|
|
|
@ -268,8 +277,11 @@ defmodule Pleroma.Web.WebFinger do
|
|
|
|
if doc != :error do
|
|
|
|
if doc != :error do
|
|
|
|
webfinger_from_xml(doc)
|
|
|
|
webfinger_from_xml(doc)
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{:ok, doc} = Jason.decode(body)
|
|
|
|
with {:ok, doc} <- Jason.decode(body) do
|
|
|
|
webfinger_from_json(doc)
|
|
|
|
webfinger_from_json(doc)
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{:error, e} -> e
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
else
|
|
|
|
e ->
|
|
|
|
e ->
|
|
|
|