projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'bugfix/mix.exs-version-dot-git-less' into 'develop'
[akkoma]
/
lib
/
pleroma
/
web
/
activity_pub
/
object_validators
/
chat_message_validator.ex
diff --git
a/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex
b/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex
index e40c80ab45a80df8e0537ce2a03c5ab64e53ef43..c481d79e0483aa11c7ca68da75943127cb275be8 100644
(file)
--- a/
lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex
+++ b/
lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex
@@
-5,9
+5,9
@@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do
use Ecto.Schema
defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do
use Ecto.Schema
+ alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator
- alias Pleroma.Web.ActivityPub.ObjectValidators.Types
import Ecto.Changeset
import Pleroma.Web.ActivityPub.Transmogrifier, only: [fix_emoji: 1]
import Ecto.Changeset
import Pleroma.Web.ActivityPub.Transmogrifier, only: [fix_emoji: 1]
@@
-16,12
+16,12
@@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do
@derive Jason.Encoder
embedded_schema do
@derive Jason.Encoder
embedded_schema do
- field(:id,
Type
s.ObjectID, primary_key: true)
- field(:to,
Type
s.Recipients, default: [])
+ field(:id,
ObjectValidator
s.ObjectID, primary_key: true)
+ field(:to,
ObjectValidator
s.Recipients, default: [])
field(:type, :string)
field(:type, :string)
- field(:content,
Type
s.SafeText)
- field(:actor,
Type
s.ObjectID)
- field(:published,
Type
s.DateTime)
+ field(:content,
ObjectValidator
s.SafeText)
+ field(:actor,
ObjectValidator
s.ObjectID)
+ field(:published,
ObjectValidator
s.DateTime)
field(:emoji, :map, default: %{})
embeds_one(:attachment, AttachmentValidator)
field(:emoji, :map, default: %{})
embeds_one(:attachment, AttachmentValidator)
@@
-47,9
+47,18
@@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do
def fix(data) do
data
|> fix_emoji()
def fix(data) do
data
|> fix_emoji()
+ |> fix_attachment()
|> Map.put_new("actor", data["attributedTo"])
end
|> Map.put_new("actor", data["attributedTo"])
end
+ # Throws everything but the first one away
+ def fix_attachment(%{"attachment" => [attachment | _]} = data) do
+ data
+ |> Map.put("attachment", attachment)
+ end
+
+ def fix_attachment(data), do: data
+
def changeset(struct, data) do
data = fix(data)
def changeset(struct, data) do
data = fix(data)
@@
-61,12
+70,24
@@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do
def validate_data(data_cng) do
data_cng
|> validate_inclusion(:type, ["ChatMessage"])
def validate_data(data_cng) do
data_cng
|> validate_inclusion(:type, ["ChatMessage"])
- |> validate_required([:id, :actor, :to, :type, :content, :published])
+ |> validate_required([:id, :actor, :to, :type, :published])
+ |> validate_content_or_attachment()
|> validate_length(:to, is: 1)
|> validate_length(:content, max: Pleroma.Config.get([:instance, :remote_limit]))
|> validate_local_concern()
end
|> validate_length(:to, is: 1)
|> validate_length(:content, max: Pleroma.Config.get([:instance, :remote_limit]))
|> validate_local_concern()
end
+ def validate_content_or_attachment(cng) do
+ attachment = get_field(cng, :attachment)
+
+ if attachment do
+ cng
+ else
+ cng
+ |> validate_required([:content])
+ end
+ end
+
@doc """
Validates the following
- If both users are in our system
@doc """
Validates the following
- If both users are in our system