pleroma/lib/pleroma/web/activity_pub/object_validators/event_validator.ex

72 lines
1.7 KiB
Elixir
Raw Normal View History

2020-08-20 11:41:42 -05:00
# Pleroma: A lightweight social networking server
2022-02-26 00:11:42 -06:00
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
2020-08-20 11:41:42 -05:00
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do
use Ecto.Schema
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.Transmogrifier
2020-08-20 11:41:42 -05:00
import Ecto.Changeset
@primary_key false
@derive Jason.Encoder
# Extends from NoteValidator
embedded_schema do
quote do
unquote do
import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
message_fields()
object_fields()
status_object_fields()
end
end
2020-08-20 11:41:42 -05:00
end
def cast_and_apply(data) do
data
|> cast_data
|> apply_action(:insert)
end
def cast_and_validate(data) do
data
|> cast_data()
|> validate_data()
end
def cast_data(data) do
%__MODULE__{}
|> changeset(data)
end
defp fix(data) do
data
|> CommonFixes.fix_actor()
|> CommonFixes.fix_object_defaults()
|> Transmogrifier.fix_emoji()
2020-08-20 11:41:42 -05:00
end
def changeset(struct, data) do
data = fix(data)
struct
2021-01-07 11:23:01 -06:00
|> cast(data, __schema__(:fields) -- [:attachment, :tag])
2020-08-20 11:41:42 -05:00
|> cast_embed(:attachment)
2021-01-07 11:23:01 -06:00
|> cast_embed(:tag)
2020-08-20 11:41:42 -05:00
end
defp validate_data(data_cng) do
2020-08-20 11:41:42 -05:00
data_cng
|> validate_inclusion(:type, ["Event"])
|> validate_required([:id, :actor, :attributedTo, :type, :context])
2020-08-20 11:41:42 -05:00
|> CommonValidations.validate_any_presence([:cc, :to])
|> CommonValidations.validate_fields_match([:actor, :attributedTo])
|> CommonValidations.validate_actor_presence()
|> CommonValidations.validate_host_match()
end
end