Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F162725
emoji_react_validator.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
emoji_react_validator.ex
View Options
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator
do
use
Ecto.Schema
alias
Pleroma.Emoji
alias
Pleroma.Object
alias
Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias
Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
import
Ecto.Changeset
import
Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
@primary_key
false
embedded_schema
do
quote
do
unquote
do
import
Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
message_fields
()
activity_fields
()
embeds_many
(
:tag
,
TagValidator
)
end
end
field
(
:context
,
:string
)
field
(
:content
,
:string
)
end
def
cast_and_validate
(
data
)
do
data
|>
cast_data
()
|>
validate_data
()
end
def
cast_data
(
data
)
do
data
=
data
|>
fix
()
%
__MODULE__
{}
|>
changeset
(
data
)
end
def
changeset
(
struct
,
data
)
do
struct
|>
cast
(
data
,
__schema__
(
:fields
)
--
[
:tag
])
|>
cast_embed
(
:tag
)
end
defp
fix
(
data
)
do
data
=
data
|>
fix_emoji_qualification
()
|>
CommonFixes
.
fix_actor
()
|>
CommonFixes
.
fix_activity_addressing
()
data
=
Map
.
put_new
(
data
,
"tag"
,
[])
case
Object
.
normalize
(
data
[
"object"
])
do
%
Object
{}
=
object
->
data
|>
CommonFixes
.
fix_activity_context
(
object
)
|>
CommonFixes
.
fix_object_action_recipients
(
object
)
_
->
data
end
end
defp
fix_emoji_qualification
(%{
"content"
=>
emoji
}
=
data
)
do
new_emoji
=
Pleroma.Emoji
.
fully_qualify_emoji
(
emoji
)
cond
do
Pleroma.Emoji
.
unicode?
(
emoji
)
->
data
Pleroma.Emoji
.
unicode?
(
new_emoji
)
->
data
|>
Map
.
put
(
"content"
,
new_emoji
)
true
->
data
end
end
defp
fix_emoji_qualification
(
data
),
do
:
data
defp
validate_emoji
(
cng
)
do
content
=
get_field
(
cng
,
:content
)
if
Emoji
.
unicode?
(
content
)
||
Emoji
.
custom?
(
content
)
do
cng
else
cng
|>
add_error
(
:content
,
"is not a valid emoji"
)
end
end
defp
maybe_validate_tag_presence
(
cng
)
do
content
=
get_field
(
cng
,
:content
)
if
Emoji
.
unicode?
(
content
)
do
cng
else
tag
=
get_field
(
cng
,
:tag
)
emoji_name
=
Emoji
.
maybe_strip_name
(
content
)
case
tag
do
[%{
name
:
^
emoji_name
,
type
:
"Emoji"
,
icon
:
%{
url
:
_
}}]
->
cng
_
->
cng
|>
add_error
(
:tag
,
"does not contain an Emoji tag"
)
end
end
end
defp
validate_data
(
data_cng
)
do
data_cng
|>
validate_inclusion
(
:type
,
[
"EmojiReact"
])
|>
validate_required
([
:id
,
:type
,
:object
,
:actor
,
:context
,
:to
,
:cc
,
:content
])
|>
validate_actor_presence
()
|>
validate_object_presence
()
|>
validate_emoji
()
|>
maybe_validate_tag_presence
()
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Fri, Feb 21, 5:44 PM (13 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
66803
Default Alt Text
emoji_react_validator.ex (2 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment