diff options
| author | lambda <pleromagit@rogerbraun.net> | 2018-06-07 16:29:33 +0000 | 
|---|---|---|
| committer | lambda <pleromagit@rogerbraun.net> | 2018-06-07 16:29:33 +0000 | 
| commit | 839cb7b42404f86bdfcf043c5e8dbce08dd3928c (patch) | |
| tree | 0917a5ac87708258d546397eb26bee5876a2eee6 | |
| parent | b4292295d7fe629c6a29f221cab1deae1ec3008c (diff) | |
| parent | 595ca3bb3a80eb3908a96b13c8b446296219a9c7 (diff) | |
| download | pleroma-839cb7b42404f86bdfcf043c5e8dbce08dd3928c.tar.gz pleroma-839cb7b42404f86bdfcf043c5e8dbce08dd3928c.zip | |
Merge branch 'develop' into 'mastopost'
# Conflicts:
#   .gitignore
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | config/config.exs | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 14 | ||||
| -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 | 
5 files changed, 64 insertions, 37 deletions
| diff --git a/.gitignore b/.gitignore index 2ed4c7c82..9aad700ee 100644 --- a/.gitignore +++ b/.gitignore @@ -27,5 +27,5 @@ erl_crash.dump  .DS_Store  .env -# Editor configs +# Editor config  /.vscode
\ No newline at end of file diff --git a/config/config.exs b/config/config.exs index 826dd07b7..3292bf29c 100644 --- a/config/config.exs +++ b/config/config.exs @@ -54,7 +54,8 @@ config :pleroma, :instance,    registrations_open: true,    federating: true,    rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy, -  public: true +  public: true, +  quarantined_instances: []  config :pleroma, :activitypub, accept_blocks: true diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 4e0be5ba2..75a71da98 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -562,6 +562,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      end    end +  @quarantined_instances Keyword.get(@instance, :quarantined_instances, []) + +  def should_federate?(inbox, public) do +    if public do +      true +    else +      inbox_info = URI.parse(inbox) +      inbox_info.host not in @quarantined_instances +    end +  end +    def publish(actor, activity) do      followers =        if actor.follower_address in activity.recipients do @@ -571,6 +582,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do          []        end +    public = is_public?(activity) +      remote_inboxes =        (Pleroma.Web.Salmon.remote_users(activity) ++ followers)        |> Enum.filter(fn user -> User.ap_enabled?(user) end) @@ -578,6 +591,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do          (data["endpoints"] && data["endpoints"]["sharedInbox"]) || data["inbox"]        end)        |> Enum.uniq() +      |> Enum.filter(fn inbox -> should_federate?(inbox, public) end)      {:ok, data} = Transmogrifier.prepare_outgoing(activity.data)      json = Jason.encode!(data) 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 -> | 
