Remove unused and fix
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
3d3162f3e6
commit
548473a818
13 changed files with 52 additions and 181 deletions
|
@ -5,13 +5,13 @@
|
||||||
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContentLanguageMap do
|
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContentLanguageMap do
|
||||||
use Ecto.Type
|
use Ecto.Type
|
||||||
|
|
||||||
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
alias Pleroma.MultiLanguage
|
||||||
only: [is_good_locale_code?: 1]
|
|
||||||
|
|
||||||
def type, do: :map
|
def type, do: :map
|
||||||
|
|
||||||
def cast(%{} = object) do
|
def cast(%{} = object) do
|
||||||
with {status, %{} = data} when status in [:modified, :ok] <- validate_map(object) do
|
with {status, %{} = data} when status in [:modified, :ok] <-
|
||||||
|
MultiLanguage.validate_map(object) do
|
||||||
{:ok, data}
|
{:ok, data}
|
||||||
else
|
else
|
||||||
{_, nil} -> {:ok, nil}
|
{_, nil} -> {:ok, nil}
|
||||||
|
@ -24,26 +24,4 @@ def cast(_), do: :error
|
||||||
def dump(data), do: {:ok, data}
|
def dump(data), do: {:ok, data}
|
||||||
|
|
||||||
def load(data), do: {:ok, data}
|
def load(data), do: {:ok, data}
|
||||||
|
|
||||||
defp validate_map(%{} = object) do
|
|
||||||
{status, data} =
|
|
||||||
object
|
|
||||||
|> Enum.reduce({:ok, %{}}, fn
|
|
||||||
{lang, value}, {status, acc} when is_binary(lang) and is_binary(value) ->
|
|
||||||
if is_good_locale_code?(lang) do
|
|
||||||
{status, Map.put(acc, lang, value)}
|
|
||||||
else
|
|
||||||
{:modified, acc}
|
|
||||||
end
|
|
||||||
|
|
||||||
_, {_status, acc} ->
|
|
||||||
{:modified, acc}
|
|
||||||
end)
|
|
||||||
|
|
||||||
if data == %{} do
|
|
||||||
{status, nil}
|
|
||||||
else
|
|
||||||
{status, data}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,10 +5,12 @@
|
||||||
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode do
|
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode do
|
||||||
use Ecto.Type
|
use Ecto.Type
|
||||||
|
|
||||||
|
alias Pleroma.MultiLanguage
|
||||||
|
|
||||||
def type, do: :string
|
def type, do: :string
|
||||||
|
|
||||||
def cast(language) when is_binary(language) do
|
def cast(language) when is_binary(language) do
|
||||||
if is_good_locale_code?(language) do
|
if MultiLanguage.is_good_locale_code?(language) do
|
||||||
{:ok, language}
|
{:ok, language}
|
||||||
else
|
else
|
||||||
{:error, :invalid_language}
|
{:error, :invalid_language}
|
||||||
|
@ -20,8 +22,4 @@ def cast(_), do: :error
|
||||||
def dump(data), do: {:ok, data}
|
def dump(data), do: {:ok, data}
|
||||||
|
|
||||||
def load(data), do: {:ok, data}
|
def load(data), do: {:ok, data}
|
||||||
|
|
||||||
def is_good_locale_code?(code) when is_binary(code), do: code =~ ~r<^[a-zA-Z0-9\-]+$>
|
|
||||||
|
|
||||||
def is_good_locale_code?(_code), do: false
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.MapOfString do
|
|
||||||
use Ecto.Type
|
|
||||||
|
|
||||||
alias Pleroma.MultiLanguage
|
|
||||||
|
|
||||||
def type, do: :map
|
|
||||||
|
|
||||||
def cast(%{} = object) do
|
|
||||||
with {status, %{} = data} when status in [:modified, :ok] <-
|
|
||||||
MultiLanguage.validate_map(object) do
|
|
||||||
{:ok, data}
|
|
||||||
else
|
|
||||||
{_, nil} -> {:ok, nil}
|
|
||||||
{:error, _} -> :error
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def cast(_), do: :error
|
|
||||||
|
|
||||||
def dump(data), do: {:ok, data}
|
|
||||||
|
|
||||||
def load(data), do: {:ok, data}
|
|
||||||
end
|
|
|
@ -9,19 +9,9 @@ defp template(:single), do: Pleroma.Config.get([__MODULE__, :single_line_templat
|
||||||
defp sep(:multi), do: Pleroma.Config.get([__MODULE__, :separator])
|
defp sep(:multi), do: Pleroma.Config.get([__MODULE__, :separator])
|
||||||
defp sep(:single), do: Pleroma.Config.get([__MODULE__, :single_line_separator])
|
defp sep(:single), do: Pleroma.Config.get([__MODULE__, :single_line_separator])
|
||||||
|
|
||||||
def is_good_locale_code?(code) do
|
def is_good_locale_code?(code) when is_binary(code), do: code =~ ~r<^[a-zA-Z0-9\-]+$>
|
||||||
code
|
|
||||||
|> String.codepoints()
|
|
||||||
|> Enum.all?(&valid_char?/1)
|
|
||||||
end
|
|
||||||
|
|
||||||
# [a-zA-Z0-9-]
|
def is_good_locale_code?(_code), do: false
|
||||||
defp valid_char?(char) do
|
|
||||||
("a" <= char and char <= "z") or
|
|
||||||
("A" <= char and char <= "Z") or
|
|
||||||
("0" <= char and char <= "9") or
|
|
||||||
char == "-"
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_map(%{} = object) do
|
def validate_map(%{} = object) do
|
||||||
{status, data} =
|
{status, data} =
|
||||||
|
|
|
@ -15,7 +15,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
||||||
field(:type, :string, default: "Link")
|
field(:type, :string, default: "Link")
|
||||||
field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream")
|
field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream")
|
||||||
field(:name, :string)
|
field(:name, :string)
|
||||||
field(:nameMap, ObjectValidators.MapOfString)
|
field(:nameMap, ObjectValidators.ContentLanguageMap)
|
||||||
field(:blurhash, :string)
|
field(:blurhash, :string)
|
||||||
|
|
||||||
embeds_many :url, UrlObjectValidator, primary_key: false do
|
embeds_many :url, UrlObjectValidator, primary_key: false do
|
||||||
|
|
|
@ -50,9 +50,9 @@ defmacro status_object_fields do
|
||||||
embeds_many(:tag, TagValidator)
|
embeds_many(:tag, TagValidator)
|
||||||
|
|
||||||
field(:name, :string)
|
field(:name, :string)
|
||||||
field(:nameMap, ObjectValidators.MapOfString)
|
field(:nameMap, ObjectValidators.ContentLanguageMap)
|
||||||
field(:summary, :string)
|
field(:summary, :string)
|
||||||
field(:summaryMap, ObjectValidators.MapOfString)
|
field(:summaryMap, ObjectValidators.ContentLanguageMap)
|
||||||
|
|
||||||
field(:context, :string)
|
field(:context, :string)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
|
||||||
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
||||||
alias Pleroma.Language.LanguageDetector
|
alias Pleroma.Language.LanguageDetector
|
||||||
alias Pleroma.Maps
|
alias Pleroma.Maps
|
||||||
|
alias Pleroma.MultiLanguage
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.Object.Containment
|
alias Pleroma.Object.Containment
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
@ -14,9 +15,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
|
||||||
|
|
||||||
require Pleroma.Constants
|
require Pleroma.Constants
|
||||||
|
|
||||||
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
|
||||||
only: [is_good_locale_code?: 1]
|
|
||||||
|
|
||||||
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
||||||
|
|
||||||
def cast_and_filter_recipients(message, field, follower_collection, field_fallback \\ []) do
|
def cast_and_filter_recipients(message, field, follower_collection, field_fallback \\ []) do
|
||||||
|
@ -149,7 +147,7 @@ def maybe_add_language(object) do
|
||||||
get_language_from_content_map(object),
|
get_language_from_content_map(object),
|
||||||
get_language_from_content(object)
|
get_language_from_content(object)
|
||||||
]
|
]
|
||||||
|> Enum.find(&is_good_locale_code?(&1))
|
|> Enum.find(&MultiLanguage.is_good_locale_code?(&1))
|
||||||
|
|
||||||
if language do
|
if language do
|
||||||
Map.put(object, "language", language)
|
Map.put(object, "language", language)
|
||||||
|
|
|
@ -15,7 +15,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator do
|
||||||
embedded_schema do
|
embedded_schema do
|
||||||
field(:name, :string)
|
field(:name, :string)
|
||||||
field(:nameRendered, :string)
|
field(:nameRendered, :string)
|
||||||
field(:nameMap, ObjectValidators.MapOfString)
|
field(:nameMap, ObjectValidators.ContentLanguageMap)
|
||||||
|
|
||||||
embeds_one :replies, Replies, primary_key: false do
|
embeds_one :replies, Replies, primary_key: false do
|
||||||
field(:totalItems, :integer)
|
field(:totalItems, :integer)
|
||||||
|
|
|
@ -14,9 +14,6 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.CommonAPI.Utils
|
alias Pleroma.Web.CommonAPI.Utils
|
||||||
|
|
||||||
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
|
||||||
only: [is_good_locale_code?: 1]
|
|
||||||
|
|
||||||
import Pleroma.Web.Gettext
|
import Pleroma.Web.Gettext
|
||||||
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
||||||
|
|
||||||
|
@ -48,7 +45,6 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
|
||||||
cc: [],
|
cc: [],
|
||||||
context: nil,
|
context: nil,
|
||||||
sensitive: false,
|
sensitive: false,
|
||||||
language: nil,
|
|
||||||
object: nil,
|
object: nil,
|
||||||
preview?: false,
|
preview?: false,
|
||||||
changes: %{},
|
changes: %{},
|
||||||
|
@ -66,7 +62,6 @@ def new(user, params) do
|
||||||
def create(user, params) do
|
def create(user, params) do
|
||||||
user
|
user
|
||||||
|> new(params)
|
|> new(params)
|
||||||
|> language()
|
|
||||||
|> status()
|
|> status()
|
||||||
|> summary()
|
|> summary()
|
||||||
|> with_valid(&attachments/1)
|
|> with_valid(&attachments/1)
|
||||||
|
@ -81,9 +76,9 @@ def create(user, params) do
|
||||||
|> with_valid(&content/1)
|
|> with_valid(&content/1)
|
||||||
|> with_valid(&to_and_cc/1)
|
|> with_valid(&to_and_cc/1)
|
||||||
|> with_valid(&context/1)
|
|> with_valid(&context/1)
|
||||||
|> with_valid(&language/1)
|
|
||||||
|> sensitive()
|
|> sensitive()
|
||||||
|> with_valid(&object/1)
|
|> with_valid(&object/1)
|
||||||
|
|> with_valid(&language/1)
|
||||||
|> preview?()
|
|> preview?()
|
||||||
|> with_valid(&changes/1)
|
|> with_valid(&changes/1)
|
||||||
|> validate()
|
|> validate()
|
||||||
|
@ -155,19 +150,27 @@ defp put_params(draft, params) do
|
||||||
%__MODULE__{draft | params: params}
|
%__MODULE__{draft | params: params}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp language(%{params: %{language: language}} = draft) do
|
defp language(draft) do
|
||||||
|
language =
|
||||||
|
draft.params[:language] ||
|
||||||
|
LanguageDetector.detect(
|
||||||
|
draft.content_html <> " " <> (draft.summary || draft.params[:name])
|
||||||
|
)
|
||||||
|
|
||||||
if MultiLanguage.is_good_locale_code?(language) do
|
if MultiLanguage.is_good_locale_code?(language) do
|
||||||
%__MODULE__{draft | language: language}
|
%__MODULE__{draft | language: language}
|
||||||
else
|
else
|
||||||
add_error(
|
if draft.params[:language] do
|
||||||
draft,
|
add_error(
|
||||||
dgettext("errors", "language \"%{language}\" is invalid", language: language)
|
draft,
|
||||||
)
|
dgettext("errors", "language \"%{language}\" is invalid", language: language)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
draft
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp language(draft), do: draft
|
|
||||||
|
|
||||||
defp status(%{params: %{status_map: %{} = status_map}} = draft) do
|
defp status(%{params: %{status_map: %{} = status_map}} = draft) do
|
||||||
with {:ok, %{}} <- MultiLanguage.validate_map(status_map) do
|
with {:ok, %{}} <- MultiLanguage.validate_map(status_map) do
|
||||||
%__MODULE__{draft | status_map: status_map}
|
%__MODULE__{draft | status_map: status_map}
|
||||||
|
@ -355,20 +358,6 @@ defp sensitive(draft) do
|
||||||
%__MODULE__{draft | sensitive: sensitive}
|
%__MODULE__{draft | sensitive: sensitive}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp language(draft) do
|
|
||||||
language =
|
|
||||||
draft.params[:language] ||
|
|
||||||
LanguageDetector.detect(
|
|
||||||
draft.content_html <> " " <> (draft.summary || draft.params[:name])
|
|
||||||
)
|
|
||||||
|
|
||||||
if is_good_locale_code?(language) do
|
|
||||||
%__MODULE__{draft | language: language}
|
|
||||||
else
|
|
||||||
draft
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
defp object(draft) do
|
defp object(draft) do
|
||||||
emoji = Map.merge(Pleroma.Emoji.Formatter.get_emoji_map(draft.full_payload), draft.emoji)
|
emoji = Map.merge(Pleroma.Emoji.Formatter.get_emoji_map(draft.full_payload), draft.emoji)
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ def make_poll_data(%{poll: %{options_map: options_map, expires_in: expires_in}}
|
||||||
when is_list(options_map) do
|
when is_list(options_map) do
|
||||||
limits = Config.get([:instance, :poll_limits])
|
limits = Config.get([:instance, :poll_limits])
|
||||||
|
|
||||||
options = options |> Enum.uniq()
|
options_map = options_map |> Enum.uniq()
|
||||||
|
|
||||||
with :ok <- validate_poll_expiration(expires_in, limits),
|
with :ok <- validate_poll_expiration(expires_in, limits),
|
||||||
:ok <- validate_poll_options_map(options_map),
|
:ok <- validate_poll_options_map(options_map),
|
||||||
|
|
|
@ -205,6 +205,26 @@ def create(
|
||||||
|> do_create
|
|> do_create
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create(
|
||||||
|
%{
|
||||||
|
assigns: %{user: _user},
|
||||||
|
private: %{open_api_spex: %{body_params: %{status_map: _}}}
|
||||||
|
} = conn,
|
||||||
|
_
|
||||||
|
) do
|
||||||
|
create(conn |> put_in([:private, :open_api_spex, :body_params, :status], ""), %{})
|
||||||
|
end
|
||||||
|
|
||||||
|
def create(
|
||||||
|
%{
|
||||||
|
assigns: %{user: _user},
|
||||||
|
private: %{open_api_spex: %{body_params: %{media_ids: _}}}
|
||||||
|
} = conn,
|
||||||
|
_
|
||||||
|
) do
|
||||||
|
create(conn |> put_in([:private, :open_api_spex, :body_params, :status], ""), %{})
|
||||||
|
end
|
||||||
|
|
||||||
defp do_create(
|
defp do_create(
|
||||||
%{assigns: %{user: user}, private: %{open_api_spex: %{body_params: params}}} = conn
|
%{assigns: %{user: user}, private: %{open_api_spex: %{body_params: params}}} = conn
|
||||||
) do
|
) do
|
||||||
|
@ -232,26 +252,6 @@ defp do_create(
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create(
|
|
||||||
%{
|
|
||||||
assigns: %{user: _user},
|
|
||||||
private: %{open_api_spex: %{body_params: %{status_map: _}}} = params
|
|
||||||
} = conn,
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
create(conn |> put_in([:private, :open_api_spex, :body_params, :status], ""), %{})
|
|
||||||
end
|
|
||||||
|
|
||||||
def create(
|
|
||||||
%{
|
|
||||||
assigns: %{user: _user},
|
|
||||||
private: %{open_api_spex: %{body_params: %{media_ids: _}}} = params
|
|
||||||
} = conn,
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
create(conn |> put_in([:private, :open_api_spex, :body_params, :status], ""), %{})
|
|
||||||
end
|
|
||||||
|
|
||||||
@doc "GET /api/v1/statuses/:id/history"
|
@doc "GET /api/v1/statuses/:id/history"
|
||||||
def show_history(
|
def show_history(
|
||||||
%{assigns: assigns, private: %{open_api_spex: %{params: %{id: id} = params}}} = conn,
|
%{assigns: assigns, private: %{open_api_spex: %{params: %{id: id} = params}}} = conn,
|
||||||
|
|
|
@ -449,7 +449,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity}
|
||||||
mentions: mentions,
|
mentions: mentions,
|
||||||
tags: build_tags(tags),
|
tags: build_tags(tags),
|
||||||
application: build_application(object.data["generator"]),
|
application: build_application(object.data["generator"]),
|
||||||
language: get_language(object),
|
language: get_language(object.data),
|
||||||
emojis: build_emojis(object.data["emoji"]),
|
emojis: build_emojis(object.data["emoji"]),
|
||||||
pleroma: %{
|
pleroma: %{
|
||||||
local: activity.local,
|
local: activity.local,
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.MapOfStringTest do
|
|
||||||
alias Pleroma.EctoType.ActivityPub.ObjectValidators.MapOfString
|
|
||||||
use Pleroma.DataCase, async: true
|
|
||||||
|
|
||||||
test "it validates" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en-GB" => "meow meow"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, ^data} = MapOfString.cast(data)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it validates empty strings" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en-GB" => ""
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, ^data} = MapOfString.cast(data)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it ignores non-strings within the map" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en-GB" => 123
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, validated_data} = MapOfString.cast(data)
|
|
||||||
|
|
||||||
assert validated_data == %{"en-US" => "mew mew"}
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it ignores bad locale codes" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en_GB" => "meow meow",
|
|
||||||
"en<<#@!$#!@%!GB" => "meow meow"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, validated_data} = MapOfString.cast(data)
|
|
||||||
|
|
||||||
assert validated_data == %{"en-US" => "mew mew"}
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it complains with non-map data" do
|
|
||||||
assert :error = MapOfString.cast("mew")
|
|
||||||
assert :error = MapOfString.cast(["mew"])
|
|
||||||
assert :error = MapOfString.cast([%{"en-US" => "mew"}])
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue