field(:replies, {:array, ObjectValidators.ObjectID}, default: [])
field(:source, :map)
+ field(:contentMap, :map)
end
def cast_and_apply(data) do
defp fix_source(object), do: object
+ defp fix_content_map_languages(%{"contentMap" => content_map} = object)
+ when is_map(content_map) do
+ # Only allow valid languages
+ content_map =
+ content_map
+ |> Enum.reject(fn {lang, _content} ->
+ !Pleroma.ISO639.valid_alpha2?(lang)
+ end)
+ |> Enum.into(%{})
+
+ Map.put(object, "contentMap", content_map)
+ end
+
+ defp fix_content_map_languages(object), do: object
+
defp fix(data) do
data
|> CommonFixes.fix_actor()
|> Transmogrifier.fix_attachments()
|> Transmogrifier.fix_emoji()
|> Transmogrifier.fix_content_map()
+ |> fix_content_map_languages()
end
def changeset(struct, data) do
defp validate_data(data_cng) do
data_cng
|> validate_inclusion(:type, ["Article", "Note", "Page"])
- |> validate_required([:id, :actor, :attributedTo, :type, :context, :published])
+ |> validate_required([:id, :actor, :attributedTo, :type, :context])
|> CommonValidations.validate_any_presence([:cc, :to])
|> CommonValidations.validate_fields_match([:actor, :attributedTo])
|> CommonValidations.validate_actor_presence()