Fix follow errors

This commit is contained in:
Rachel H 2018-06-06 21:26:44 -07:00
parent 0a0c6bf394
commit 1525a0404b
3 changed files with 50 additions and 35 deletions

3
.gitignore vendored
View file

@ -26,3 +26,6 @@ erl_crash.dump
.DS_Store .DS_Store
.env .env
# Editor config
/.vscode

View file

@ -189,7 +189,7 @@ def follow_import(%{assigns: %{user: user}} = conn, %{"list" => list}) do
{:ok, follower} <- User.follow(follower, followed) do {:ok, follower} <- User.follow(follower, followed) do
ActivityPub.follow(follower, followed) ActivityPub.follow(follower, followed)
else else
_e -> Logger.debug("follow_import: following #{account} failed") err -> Logger.debug("follow_import: following #{account} failed with #{inspect(err)}")
end end
end) end)
end) end)

View file

@ -144,31 +144,33 @@ def ensure_keys_present(user) 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 @@ defp webfinger_from_xml(doc) 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 @@ def finger(account) 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 ->