DeleteValidator: Deleting a user is valid.
[akkoma] / lib / pleroma / web / activity_pub / object_validators / common_validations.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations do
6 import Ecto.Changeset
7
8 alias Pleroma.Object
9 alias Pleroma.User
10
11 def validate_recipients_presence(cng, fields \\ [:to, :cc]) do
12 non_empty =
13 fields
14 |> Enum.map(fn field -> get_field(cng, field) end)
15 |> Enum.any?(fn
16 [] -> false
17 _ -> true
18 end)
19
20 if non_empty do
21 cng
22 else
23 fields
24 |> Enum.reduce(cng, fn field, cng ->
25 cng
26 |> add_error(field, "no recipients in any field")
27 end)
28 end
29 end
30
31 def validate_actor_presence(cng, field_name \\ :actor) do
32 cng
33 |> validate_change(field_name, fn field_name, actor ->
34 if User.get_cached_by_ap_id(actor) do
35 []
36 else
37 [{field_name, "can't find user"}]
38 end
39 end)
40 end
41
42 def validate_object_presence(cng, field_name \\ :object) do
43 cng
44 |> validate_change(field_name, fn field_name, object ->
45 if Object.get_cached_by_ap_id(object) do
46 []
47 else
48 [{field_name, "can't find object"}]
49 end
50 end)
51 end
52
53 def validate_object_or_user_presence(cng, field_name \\ :object) do
54 cng
55 |> validate_change(field_name, fn field_name, object ->
56 if Object.get_cached_by_ap_id(object) || User.get_cached_by_ap_id(object) do
57 []
58 else
59 [{field_name, "can't find object"}]
60 end
61 end)
62 end
63 end