ObjectValidator.CommonFixes: Introduce fix_objects_defaults and fix_activity_defaults
[akkoma] / lib / pleroma / web / activity_pub / object_validators / common_fixes.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
6 alias Pleroma.EctoType.ActivityPub.ObjectValidators
7 alias Pleroma.Object.Containment
8 alias Pleroma.User
9 alias Pleroma.Web.ActivityPub.Transmogrifier
10 alias Pleroma.Web.ActivityPub.Utils
11
12 def fix_object_defaults(data) do
13 %{data: %{"id" => context}, id: context_id} =
14 Utils.create_context(data["context"] || data["conversation"])
15
16 %User{follower_address: follower_collection} = User.get_cached_by_ap_id(data["attributedTo"])
17 {:ok, to} = ObjectValidators.Recipients.cast(data["to"] || [])
18 {:ok, cc} = ObjectValidators.Recipients.cast(data["cc"] || [])
19
20 data
21 |> Map.put("context", context)
22 |> Map.put("context_id", context_id)
23 |> Map.put("to", to)
24 |> Map.put("cc", cc)
25 |> Transmogrifier.fix_explicit_addressing(follower_collection)
26 |> Transmogrifier.fix_implicit_addressing(follower_collection)
27 end
28
29 def fix_activity_defaults(data, meta) do
30 object = meta[:object_data] || %{}
31
32 data
33 |> Map.put_new("to", object["to"] || [])
34 |> Map.put_new("cc", object["cc"] || [])
35 |> Map.put_new("bto", object["bto"] || [])
36 |> Map.put_new("bcc", object["bcc"] || [])
37 end
38
39 def fix_actor(data) do
40 actor =
41 data
42 |> Map.put_new("actor", data["attributedTo"])
43 |> Containment.get_actor()
44
45 data
46 |> Map.put("actor", actor)
47 |> Map.put("attributedTo", actor)
48 end
49 end