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

66 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-2020 Pleroma Authors <https://pleroma.social/>
# 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
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
2020-06-19 22:23:04 +00:00
field(:id, ObjectValidators.ObjectID, primary_key: true)
2020-06-11 18:43:01 +00:00
field(:to, {:array, :string}, default: [])
field(:cc, {:array, :string}, default: [])
# is this actually needed?
2020-06-11 18:43:01 +00:00
field(:bto, {:array, :string}, default: [])
field(:bcc, {:array, :string}, default: [])
2020-06-11 18:43:01 +00:00
field(:type, :string)
field(:name, :string)
field(:inReplyTo, :string)
2020-06-19 22:23:04 +00:00
field(:attributedTo, ObjectValidators.ObjectID)
# 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) do
data
|> cast_data()
|> validate_data()
end
def cast_data(data) do
%__MODULE__{}
|> changeset(data)
end
def changeset(struct, data) do
struct
|> cast(data, __schema__(:fields))
end
def validate_data(data_cng) do
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