projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'develop' into activation-meta
[akkoma]
/
lib
/
pleroma
/
web
/
activity_pub
/
mrf
/
simple_policy.ex
diff --git
a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex
b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex
index f266457e31d89b26ad75b9c9a2f878daa7581516..9cea6bcf9209868e7f6bf403a82d8c10c040f193 100644
(file)
--- a/
lib/pleroma/web/activity_pub/mrf/simple_policy.ex
+++ b/
lib/pleroma/web/activity_pub/mrf/simple_policy.ex
@@
-1,23
+1,25
@@
# Pleroma: A lightweight social networking server
# Pleroma: A lightweight social networking server
-# Copyright © 2017-20
19
Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-20
20
Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
+ @moduledoc "Filter activities depending on their origin instance"
+ @behaviour Pleroma.Web.ActivityPub.MRF
+
+ alias Pleroma.Config
alias Pleroma.User
alias Pleroma.Web.ActivityPub.MRF
alias Pleroma.User
alias Pleroma.Web.ActivityPub.MRF
- @moduledoc "Filter activities depending on their origin instance"
- @behaviour MRF
require Pleroma.Constants
defp check_accept(%{host: actor_host} = _actor_info, object) do
accepts =
require Pleroma.Constants
defp check_accept(%{host: actor_host} = _actor_info, object) do
accepts =
-
Pleroma.
Config.get([:mrf_simple, :accept])
+ Config.get([:mrf_simple, :accept])
|> MRF.subdomains_regex()
cond do
accepts == [] -> {:ok, object}
|> MRF.subdomains_regex()
cond do
accepts == [] -> {:ok, object}
- actor_host ==
Pleroma.
Config.get([Pleroma.Web.Endpoint, :url, :host]) -> {:ok, object}
+ actor_host == Config.get([Pleroma.Web.Endpoint, :url, :host]) -> {:ok, object}
MRF.subdomain_match?(accepts, actor_host) -> {:ok, object}
true -> {:reject, nil}
end
MRF.subdomain_match?(accepts, actor_host) -> {:ok, object}
true -> {:reject, nil}
end
@@
-25,7
+27,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_reject(%{host: actor_host} = _actor_info, object) do
rejects =
defp check_reject(%{host: actor_host} = _actor_info, object) do
rejects =
-
Pleroma.
Config.get([:mrf_simple, :reject])
+ Config.get([:mrf_simple, :reject])
|> MRF.subdomains_regex()
if MRF.subdomain_match?(rejects, actor_host) do
|> MRF.subdomains_regex()
if MRF.subdomain_match?(rejects, actor_host) do
@@
-41,7
+43,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
)
when length(child_attachment) > 0 do
media_removal =
)
when length(child_attachment) > 0 do
media_removal =
-
Pleroma.
Config.get([:mrf_simple, :media_removal])
+ Config.get([:mrf_simple, :media_removal])
|> MRF.subdomains_regex()
object =
|> MRF.subdomains_regex()
object =
@@
-65,7
+67,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
} = object
) do
media_nsfw =
} = object
) do
media_nsfw =
-
Pleroma.
Config.get([:mrf_simple, :media_nsfw])
+ Config.get([:mrf_simple, :media_nsfw])
|> MRF.subdomains_regex()
object =
|> MRF.subdomains_regex()
object =
@@
-85,7
+87,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do
timeline_removal =
defp check_ftl_removal(%{host: actor_host} = _actor_info, object) do
timeline_removal =
-
Pleroma.
Config.get([:mrf_simple, :federated_timeline_removal])
+ Config.get([:mrf_simple, :federated_timeline_removal])
|> MRF.subdomains_regex()
object =
|> MRF.subdomains_regex()
object =
@@
-108,7
+110,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do
report_removal =
defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do
report_removal =
-
Pleroma.
Config.get([:mrf_simple, :report_removal])
+ Config.get([:mrf_simple, :report_removal])
|> MRF.subdomains_regex()
if MRF.subdomain_match?(report_removal, actor_host) do
|> MRF.subdomains_regex()
if MRF.subdomain_match?(report_removal, actor_host) do
@@
-122,7
+124,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_avatar_removal(%{host: actor_host} = _actor_info, %{"icon" => _icon} = object) do
avatar_removal =
defp check_avatar_removal(%{host: actor_host} = _actor_info, %{"icon" => _icon} = object) do
avatar_removal =
-
Pleroma.
Config.get([:mrf_simple, :avatar_removal])
+ Config.get([:mrf_simple, :avatar_removal])
|> MRF.subdomains_regex()
if MRF.subdomain_match?(avatar_removal, actor_host) do
|> MRF.subdomains_regex()
if MRF.subdomain_match?(avatar_removal, actor_host) do
@@
-136,7
+138,7
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_banner_removal(%{host: actor_host} = _actor_info, %{"image" => _image} = object) do
banner_removal =
defp check_banner_removal(%{host: actor_host} = _actor_info, %{"image" => _image} = object) do
banner_removal =
-
Pleroma.
Config.get([:mrf_simple, :banner_removal])
+ Config.get([:mrf_simple, :banner_removal])
|> MRF.subdomains_regex()
if MRF.subdomain_match?(banner_removal, actor_host) do
|> MRF.subdomains_regex()
if MRF.subdomain_match?(banner_removal, actor_host) do
@@
-148,6
+150,21
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_banner_removal(_actor_info, object), do: {:ok, object}
defp check_banner_removal(_actor_info, object), do: {:ok, object}
+ @impl true
+ def filter(%{"type" => "Delete", "actor" => actor} = object) do
+ %{host: actor_host} = URI.parse(actor)
+
+ reject_deletes =
+ Pleroma.Config.get([:mrf_simple, :reject_deletes])
+ |> MRF.subdomains_regex()
+
+ if MRF.subdomain_match?(reject_deletes, actor_host) do
+ {:reject, nil}
+ else
+ {:ok, object}
+ end
+ end
+
@impl true
def filter(%{"actor" => actor} = object) do
actor_info = URI.parse(actor)
@impl true
def filter(%{"actor" => actor} = object) do
actor_info = URI.parse(actor)
@@
-168,7
+185,9
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
when obj_type in ["Application", "Group", "Organization", "Person", "Service"] do
actor_info = URI.parse(actor)
when obj_type in ["Application", "Group", "Organization", "Person", "Service"] do
actor_info = URI.parse(actor)
- with {:ok, object} <- check_avatar_removal(actor_info, object),
+ with {:ok, object} <- check_accept(actor_info, object),
+ {:ok, object} <- check_reject(actor_info, object),
+ {:ok, object} <- check_avatar_removal(actor_info, object),
{:ok, object} <- check_banner_removal(actor_info, object) do
{:ok, object}
else
{:ok, object} <- check_banner_removal(actor_info, object) do
{:ok, object}
else
@@
-177,4
+196,16
@@
defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
end
def filter(object), do: {:ok, object}
end
def filter(object), do: {:ok, object}
+
+ @impl true
+ def describe do
+ exclusions = Config.get([: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(%{})
+
+ {:ok, %{mrf_simple: mrf_simple}}
+ end
end
end