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

71 lines
1.7 KiB
Elixir
Raw Normal View History

2020-06-11 18:43:01 +00:00
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
2020-06-11 18:43:01 +00:00
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnswerValidator do
use Ecto.Schema
2020-06-19 22:23:04 +00:00
alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
2020-06-11 18:43:01 +00:00
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
import Ecto.Changeset
@primary_key false
@derive Jason.Encoder
embedded_schema do
quote do
unquote do
import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
message_fields()
end
end
2020-06-11 18:43:01 +00:00
field(:name, :string)
field(:inReplyTo, ObjectValidators.ObjectID)
2020-06-19 22:23:04 +00:00
field(:attributedTo, ObjectValidators.ObjectID)
field(:context, :string)
# TODO: Remove actor on objects
2020-06-19 22:23:04 +00:00
field(:actor, ObjectValidators.ObjectID)
2020-06-11 18:43:01 +00:00
end
def cast_and_apply(data) do
data
|> cast_data()
2020-06-11 18:43:01 +00:00
|> apply_action(:insert)
end
def cast_and_validate(data, _meta \\ []) do
2020-06-11 18:43:01 +00:00
data
|> cast_data()
|> validate_data()
end
def cast_data(data) do
%__MODULE__{}
|> changeset(data)
end
def changeset(struct, data) do
data =
data
|> CommonFixes.fix_actor()
|> CommonFixes.fix_object_defaults()
2020-06-11 18:43:01 +00:00
struct
|> cast(data, __schema__(:fields))
end
defp validate_data(data_cng) do
2020-06-11 18:43:01 +00:00
data_cng
|> validate_inclusion(:type, ["Answer"])
|> validate_required([:id, :inReplyTo, :name, :attributedTo, :actor])
2020-06-11 18:43:01 +00:00
|> CommonValidations.validate_any_presence([:cc, :to])
|> CommonValidations.validate_fields_match([:actor, :attributedTo])
|> CommonValidations.validate_actor_presence()
|> CommonValidations.validate_host_match()
2020-06-11 18:43:01 +00:00
end
end