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 changeset(struct, %{"type" => "Book"} = data) do
73 if Map.has_key?(data, "title") do
74 Map.put(data, "name", data["title"])
80 |> cast(data, [:type, :name])
81 |> validate_required([:type, :name])
84 def changeset(struct, %{"type" => "Edition"} = data) do
85 # Sometimes it's title, sometimes name
88 if Map.has_key?(data, "title") do
89 Map.put(data, "name", data["title"])
95 |> cast(data, [:type, :name])
96 |> validate_required([:type, :name])
99 def changeset(struct, %{"type" => "Work"} = data) do
101 if Map.has_key?(data, "title") do
102 Map.put(data, "name", data["title"])
108 |> cast(data, [:type, :name])
109 |> validate_required([:type, :name])
112 def changeset(struct, %{"type" => "Author"} = data) do
114 |> cast(data, [:type, :name])
115 |> validate_required([:type, :name])
118 def icon_changeset(struct, data) do
120 |> cast(data, [:type, :url])
121 |> validate_inclusion(:type, ~w[Image])
122 |> validate_required([:type, :url])