diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/twitter_api/controllers/util_controller.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/web_finger/web_finger.ex | 80 | 
2 files changed, 47 insertions, 35 deletions
| diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index cc5146566..7a0c37ce9 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -189,7 +189,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do               {:ok, follower} <- User.follow(follower, followed) do            ActivityPub.follow(follower, followed)          else -          _e -> Logger.debug("follow_import: following #{account} failed") +          err -> Logger.debug("follow_import: following #{account} failed with #{inspect(err)}")          end        end)      end) diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index 0b417479d..e7ee810f9 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -144,41 +144,50 @@ defmodule Pleroma.Web.WebFinger do      end    end -  defp webfinger_from_xml(doc) do -    magic_key = XML.string_from_xpath(~s{//Link[@rel="magic-public-key"]/@href}, doc) +  defp get_magic_key(magic_key) do      "data:application/magic-public-key," <> magic_key = magic_key +    {:ok, magic_key} +  rescue +    MatchError -> {:error, "Missing magic key data."} +  end -    topic = -      XML.string_from_xpath( -        ~s{//Link[@rel="http://schemas.google.com/g/2010#updates-from"]/@href}, -        doc -      ) - -    subject = XML.string_from_xpath("//Subject", doc) -    salmon = XML.string_from_xpath(~s{//Link[@rel="salmon"]/@href}, doc) - -    subscribe_address = -      XML.string_from_xpath( -        ~s{//Link[@rel="http://ostatus.org/schema/1.0/subscribe"]/@template}, -        doc -      ) - -    ap_id = -      XML.string_from_xpath( -        ~s{//Link[@rel="self" and @type="application/activity+json"]/@href}, -        doc -      ) - -    data = %{ -      "magic_key" => magic_key, -      "topic" => topic, -      "subject" => subject, -      "salmon" => salmon, -      "subscribe_address" => subscribe_address, -      "ap_id" => ap_id -    } +  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( +             ~s{//Link[@rel="http://schemas.google.com/g/2010#updates-from"]/@href}, +             doc +           ), +         subject <- XML.string_from_xpath("//Subject", doc), +         salmon <- XML.string_from_xpath(~s{//Link[@rel="salmon"]/@href}, doc), +         subscribe_address <- +           XML.string_from_xpath( +             ~s{//Link[@rel="http://ostatus.org/schema/1.0/subscribe"]/@template}, +             doc +           ), +         ap_id <- +           XML.string_from_xpath( +             ~s{//Link[@rel="self" and @type="application/activity+json"]/@href}, +             doc +           ) do +      data = %{ +        "magic_key" => magic_key, +        "topic" => topic, +        "subject" => subject, +        "salmon" => salmon, +        "subscribe_address" => subscribe_address, +        "ap_id" => ap_id +      } -    {:ok, data} +      {:ok, data} +    else +      {:error, e} -> +        {:error, e} + +      e -> +        {:error, e} +    end    end    defp webfinger_from_json(doc) do @@ -268,8 +277,11 @@ defmodule Pleroma.Web.WebFinger do        if doc != :error do          webfinger_from_xml(doc)        else -        {:ok, doc} = Jason.decode(body) -        webfinger_from_json(doc) +        with {:ok, doc} <- Jason.decode(body) do +          webfinger_from_json(doc) +        else +          {:error, e} -> e +        end        end      else        e -> | 
