1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidator do
8 alias Pleroma.EctoType.ActivityPub.ObjectValidators
19 field(:href, ObjectValidators.Uri)
22 embeds_one :icon, IconObjectValidator, primary_key: false do
24 field(:url, ObjectValidators.Uri)
27 field(:updated, ObjectValidators.DateTime)
28 field(:id, ObjectValidators.Uri)
31 def cast_and_validate(data) do
36 def cast_data(data) do
41 def changeset(struct, %{"type" => "Mention"} = data) do
43 |> cast(data, [:type, :name, :href])
44 |> validate_required([:type, :href])
47 def changeset(struct, %{"type" => "Hashtag", "name" => name} = data) do
55 data = Map.put(data, "name", name)
58 |> cast(data, [:type, :name, :href])
59 |> validate_required([:type, :name])
62 def changeset(struct, %{"type" => "Emoji"} = data) do
63 data = Map.put(data, "name", String.trim(data["name"], ":"))
66 |> cast(data, [:type, :name, :updated, :id])
67 |> cast_embed(:icon, with: &icon_changeset/2)
68 |> validate_required([:type, :name, :icon])
71 def icon_changeset(struct, data) do
73 |> cast(data, [:type, :url])
74 |> validate_inclusion(:type, ~w[Image])
75 |> validate_required([:type, :url])