aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-09-15 17:22:08 +0200
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2021-04-05 19:19:12 +0200
commit96212b2e32e2542964c665f091158fb1ff1d987d (patch)
tree6ba831d46479e08a050a47319834cdbc8d276d61 /lib
parent641184fc7aff694e4e7e802b9204a1d313c0877c (diff)
downloadpleroma-96212b2e32e2542964c665f091158fb1ff1d987d.tar.gz
Fix addressing
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/object/fetcher.ex7
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/common_fixes.ex25
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex9
3 files changed, 23 insertions, 18 deletions
diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex
index bcccf1c4c..82d2c8bcb 100644
--- a/lib/pleroma/object/fetcher.ex
+++ b/lib/pleroma/object/fetcher.ex
@@ -4,6 +4,7 @@
defmodule Pleroma.Object.Fetcher do
alias Pleroma.HTTP
+ alias Pleroma.Maps
alias Pleroma.Object
alias Pleroma.Object.Containment
alias Pleroma.Repo
@@ -124,12 +125,14 @@ defmodule Pleroma.Object.Fetcher do
defp prepare_activity_params(data) do
%{
"type" => "Create",
- "to" => data["to"] || [],
- "cc" => data["cc"] || [],
# Should we seriously keep this attributedTo thing?
"actor" => data["actor"] || data["attributedTo"],
"object" => data
}
+ |> Maps.put_if_present("to", data["to"])
+ |> Maps.put_if_present("cc", data["cc"])
+ |> Maps.put_if_present("bto", data["bto"])
+ |> Maps.put_if_present("bcc", data["bcc"])
end
def fetch_object_from_id!(id, options \\ []) do
diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex
index 009cd51b0..c958fcc5d 100644
--- a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex
+++ b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex
@@ -9,9 +9,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
alias Pleroma.Web.ActivityPub.Transmogrifier
alias Pleroma.Web.ActivityPub.Utils
- def cast_recipients(message, field, field_fallback \\ []) do
+ def cast_and_filter_recipients(message, field, follower_collection, field_fallback \\ []) do
{:ok, data} = ObjectValidators.Recipients.cast(message[field] || field_fallback)
+ data =
+ Enum.reject(data, fn x ->
+ String.ends_with?(x, "/followers") and x != follower_collection
+ end)
+
Map.put(message, field, data)
end
@@ -24,11 +29,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
data
|> Map.put("context", context)
|> Map.put("context_id", context_id)
- |> cast_recipients("to")
- |> cast_recipients("cc")
- |> cast_recipients("bto")
- |> cast_recipients("bcc")
- |> Transmogrifier.fix_explicit_addressing(follower_collection)
+ |> cast_and_filter_recipients("to", follower_collection)
+ |> cast_and_filter_recipients("cc", follower_collection)
+ |> cast_and_filter_recipients("bto", follower_collection)
+ |> cast_and_filter_recipients("bcc", follower_collection)
|> Transmogrifier.fix_implicit_addressing(follower_collection)
end
@@ -36,11 +40,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
%User{follower_address: follower_collection} = User.get_cached_by_ap_id(activity["actor"])
activity
- |> cast_recipients("to")
- |> cast_recipients("cc")
- |> cast_recipients("bto")
- |> cast_recipients("bcc")
- |> Transmogrifier.fix_explicit_addressing(follower_collection)
+ |> cast_and_filter_recipients("to", follower_collection)
+ |> cast_and_filter_recipients("cc", follower_collection)
+ |> cast_and_filter_recipients("bto", follower_collection)
+ |> cast_and_filter_recipients("bcc", follower_collection)
|> Transmogrifier.fix_implicit_addressing(follower_collection)
end
diff --git a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex
index 51d43e8d0..d2de53049 100644
--- a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex
@@ -63,11 +63,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do
%User{follower_address: follower_collection} = User.get_cached_by_ap_id(data["actor"])
data
- |> CommonFixes.cast_recipients("to", object["to"])
- |> CommonFixes.cast_recipients("cc", object["cc"])
- |> CommonFixes.cast_recipients("bto", object["bto"])
- |> CommonFixes.cast_recipients("bcc", object["bcc"])
- |> Transmogrifier.fix_explicit_addressing(follower_collection)
+ |> CommonFixes.cast_and_filter_recipients("to", follower_collection, object["to"])
+ |> CommonFixes.cast_and_filter_recipients("cc", follower_collection, object["cc"])
+ |> CommonFixes.cast_and_filter_recipients("bto", follower_collection, object["bto"])
+ |> CommonFixes.cast_and_filter_recipients("bcc", follower_collection, object["bcc"])
|> Transmogrifier.fix_implicit_addressing(follower_collection)
end