object_validators: only query relevant table for object
Most of them actually only accept either activities or a non-activity object later; querying both is then a waste of resources and may create false positives.
This commit is contained in:
parent
b0387dee14
commit
7ad5f8d3c0
5 changed files with 12 additions and 5 deletions
|
@ -54,10 +54,14 @@ def validate_actor_presence(cng, options \\ []) do
|
|||
def validate_object_presence(cng, options \\ []) do
|
||||
field_name = Keyword.get(options, :field_name, :object)
|
||||
allowed_types = Keyword.get(options, :allowed_types, false)
|
||||
allowed_categories = Keyword.get(options, :allowed_object_categores, [:object, :activity])
|
||||
|
||||
cng
|
||||
|> validate_change(field_name, fn field_name, object_id ->
|
||||
object = Object.get_cached_by_ap_id(object_id) || Activity.get_by_ap_id(object_id)
|
||||
object =
|
||||
(:object in allowed_categories && Object.get_cached_by_ap_id(object_id)) ||
|
||||
(:activity in allowed_categories && Activity.get_by_ap_id(object_id)) ||
|
||||
nil
|
||||
|
||||
cond do
|
||||
!object ->
|
||||
|
|
|
@ -61,7 +61,10 @@ defp validate_data(cng) do
|
|||
|> validate_inclusion(:type, ["Delete"])
|
||||
|> validate_delete_actor(:actor)
|
||||
|> validate_modification_rights()
|
||||
|> validate_object_or_user_presence(allowed_types: @deletable_types)
|
||||
|> validate_object_or_user_presence(
|
||||
allowed_types: @deletable_types,
|
||||
allowed_object_categories: [:object]
|
||||
)
|
||||
|> add_deleted_activity_id()
|
||||
end
|
||||
|
||||
|
|
|
@ -129,7 +129,7 @@ defp validate_data(data_cng) do
|
|||
|> validate_inclusion(:type, ["EmojiReact"])
|
||||
|> validate_required([:id, :type, :object, :actor, :context, :to, :cc, :content])
|
||||
|> validate_actor_presence()
|
||||
|> validate_object_presence()
|
||||
|> validate_object_presence(allowed_object_categories: [:object])
|
||||
|> validate_emoji()
|
||||
|> maybe_validate_tag_presence()
|
||||
end
|
||||
|
|
|
@ -66,7 +66,7 @@ defp validate_data(data_cng) do
|
|||
|> validate_inclusion(:type, ["Like"])
|
||||
|> validate_required([:id, :type, :object, :actor, :context, :to, :cc])
|
||||
|> validate_actor_presence()
|
||||
|> validate_object_presence()
|
||||
|> validate_object_presence(allowed_object_categories: [:object])
|
||||
|> validate_existing_like()
|
||||
end
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ defp validate_data(data_cng) do
|
|||
|> validate_inclusion(:type, ["Undo"])
|
||||
|> validate_required([:id, :type, :object, :actor, :to, :cc])
|
||||
|> validate_undo_actor(:actor)
|
||||
|> validate_object_presence()
|
||||
|> validate_object_presence(allowed_object_categories: [:activity])
|
||||
|> validate_undo_rights()
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue