Browse Source

nodeinfo: implement MRF transparency exclusions

tags/v1.1.4
Ariadne Conill 5 years ago
parent
commit
80c46d6d8b
5 changed files with 51 additions and 1 deletions
  1. +1
    -0
      CHANGELOG.md
  2. +1
    -0
      config/config.exs
  3. +1
    -0
      docs/config.md
  4. +5
    -1
      lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
  5. +43
    -0
      test/web/node_info_test.exs

+ 1
- 0
CHANGELOG.md View File

@@ -22,6 +22,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### Added
- MRF: Support for priming the mediaproxy cache (`Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy`)
- MRF: Support for excluding specific domains from Transparency.
- Configuration: `federation_incoming_replies_max_depth` option
- Mastodon API: Support for the [`tagged` filter](https://github.com/tootsuite/mastodon/pull/9755) in [`GET /api/v1/accounts/:id/statuses`](https://docs.joinmastodon.org/api/rest/accounts/#get-api-v1-accounts-id-statuses)
- Mastodon API, streaming: Add support for passing the token in the `Sec-WebSocket-Protocol` header


+ 1
- 0
config/config.exs View File

@@ -240,6 +240,7 @@ config :pleroma, :instance,
"text/bbcode"
],
mrf_transparency: true,
mrf_transparency_exclusions: [],
autofollowed_nicknames: [],
max_pinned_statuses: 1,
no_attachment_links: false,


+ 1
- 0
docs/config.md View File

@@ -106,6 +106,7 @@ config :pleroma, Pleroma.Emails.Mailer,
* `managed_config`: Whenether the config for pleroma-fe is configured in this config or in ``static/config.json``
* `allowed_post_formats`: MIME-type list of formats allowed to be posted (transformed into HTML)
* `mrf_transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo).
* `mrf_transparency_exclusions`: Exclude specific instance names from MRF transparency.
* `scope_copy`: Copy the scope (private/unlisted/public) in replies to posts by default.
* `subject_line_behavior`: Allows changing the default behaviour of subject lines in replies. Valid values:
* "email": Copy and preprend re:, as in email.


+ 5
- 1
lib/pleroma/web/nodeinfo/nodeinfo_controller.ex View File

@@ -34,8 +34,11 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
def raw_nodeinfo do
stats = Stats.get_stats()

exclusions = Config.get([:instance, :mrf_transparency_exclusions])

mrf_simple =
Config.get(:mrf_simple)
|> Enum.map(fn {k, v} -> {k, Enum.reject(v, fn v -> v in exclusions end)} end)
|> Enum.into(%{})

# This horror is needed to convert regex sigils to strings
@@ -86,7 +89,8 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
mrf_simple: mrf_simple,
mrf_keyword: mrf_keyword,
mrf_user_allowlist: mrf_user_allowlist,
quarantined_instances: quarantined
quarantined_instances: quarantined,
exclusions: length(exclusions) > 0
}
else
%{}


+ 43
- 0
test/web/node_info_test.exs View File

@@ -83,4 +83,47 @@ defmodule Pleroma.Web.NodeInfoTest do

Pleroma.Config.put([:instance, :safe_dm_mentions], option)
end

test "it shows MRF transparency data if enabled", %{conn: conn} do
option = Pleroma.Config.get([:instance, :mrf_transparency])
Pleroma.Config.put([:instance, :mrf_transparency], true)

simple_config = %{"reject" => ["example.com"]}
Pleroma.Config.put(:mrf_simple, simple_config)

response =
conn
|> get("/nodeinfo/2.1.json")
|> json_response(:ok)

assert response["metadata"]["federation"]["mrf_simple"] == simple_config

Pleroma.Config.put([:instance, :mrf_transparency], option)
Pleroma.Config.put(:mrf_simple, %{})
end

test "it performs exclusions from MRF transparency data if configured", %{conn: conn} do
option = Pleroma.Config.get([:instance, :mrf_transparency])
Pleroma.Config.put([:instance, :mrf_transparency], true)

exclusions = Pleroma.Config.get([:instance, :mrf_transparency_exclusions])
Pleroma.Config.put([:instance, :mrf_transparency_exclusions], ["other.site"])

simple_config = %{"reject" => ["example.com", "other.site"]}
expected_config = %{"reject" => ["example.com"]}

Pleroma.Config.put(:mrf_simple, simple_config)

response =
conn
|> get("/nodeinfo/2.1.json")
|> json_response(:ok)

assert response["metadata"]["federation"]["mrf_simple"] == expected_config
assert response["metadata"]["federation"]["exclusions"] == true

Pleroma.Config.put([:instance, :mrf_transparency], option)
Pleroma.Config.put([:instance, :mrf_transparency_exclusions], exclusions)
Pleroma.Config.put(:mrf_simple, %{})
end
end

Loading…
Cancel
Save