Allow to specify post language

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2023-08-10 23:03:19 +02:00
commit 4745a41393
14 changed files with 279 additions and 25 deletions

View file

@ -33,6 +33,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
cc: [],
context: nil,
sensitive: false,
language: nil,
object: nil,
preview?: false,
changes: %{}
@ -57,6 +58,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
|> content()
|> with_valid(&to_and_cc/1)
|> with_valid(&context/1)
|> with_valid(&language/1)
|> sensitive()
|> with_valid(&object/1)
|> preview?()
@ -190,6 +192,16 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
%__MODULE__{draft | sensitive: sensitive}
end
defp language(draft) do
language = draft.params[:language]
if Utils.is_good_locale_code?(language) do
%__MODULE__{draft | language: language}
else
draft
end
end
defp object(draft) do
emoji = Map.merge(Pleroma.Emoji.Formatter.get_emoji_map(draft.full_payload), draft.emoji)
@ -229,6 +241,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
"mediaType" => Utils.get_content_type(draft.params[:content_type])
})
|> Map.put("generator", draft.params[:generator])
|> Map.put("language", draft.language)
%__MODULE__{draft | object: object}
end

View file

@ -494,4 +494,20 @@ defmodule Pleroma.Web.CommonAPI.Utils do
{:error, dgettext("errors", "Too many attachments")}
end
end
def is_good_locale_code?(code) when is_binary(code) do
code
|> String.codepoints()
|> Enum.all?(&valid_char?/1)
end
def is_good_locale_code?(_code), do: false
# [a-zA-Z0-9-]
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
end