diff options
author | Alex Gleason <alex@alexgleason.me> | 2022-02-06 18:25:14 +0000 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2022-02-06 18:25:14 +0000 |
commit | fa8e2ffa3f493d5b2911507b0ac06094615e9d8f (patch) | |
tree | 34686c246e9517ae9018175ffee93804935d59c0 /lib | |
parent | 60deddb7e5b8bb10037cca6e6f11a5bbef298d39 (diff) | |
parent | e473bcf7a0390584377d89ff68267a25fe31e44d (diff) | |
download | pleroma-fa8e2ffa3f493d5b2911507b0ac06094615e9d8f.tar.gz |
Merge branch 'max_media_attachments' into 'develop'
Allow specifying max media attachment count
Closes #2665
See merge request pleroma/pleroma!3630
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/common_api/activity_draft.ex | 7 | ||||
-rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 15 | ||||
-rw-r--r-- | lib/pleroma/web/mastodon_api/views/instance_view.ex | 1 |
3 files changed, 22 insertions, 1 deletions
diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index b4e3e37ae..451d7323a 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -112,7 +112,12 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do defp attachments(%{params: params} = draft) do attachments = Utils.attachments_from_ids(params) - %__MODULE__{draft | attachments: attachments} + draft = %__MODULE__{draft | attachments: attachments} + + case Utils.validate_attachments_count(attachments) do + :ok -> draft + {:error, message} -> add_error(draft, message) + end end defp in_reply_to(%{params: %{in_reply_to_status_id: ""}} = draft), do: draft diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index b6feaf32a..5bba01cc4 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -492,4 +492,19 @@ defmodule Pleroma.Web.CommonAPI.Utils do {:error, dgettext("errors", "The status is over the character limit")} end end + + def validate_attachments_count([] = _attachments) do + :ok + end + + def validate_attachments_count(attachments) do + limit = Config.get([:instance, :max_media_attachments]) + count = length(attachments) + + if count <= limit do + :ok + else + {:error, dgettext("errors", "Too many attachments")} + end + end end diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index fa6c20a30..23770f671 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -31,6 +31,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do approval_required: Keyword.get(instance, :account_approval_required), # Extra (not present in Mastodon): max_toot_chars: Keyword.get(instance, :limit), + max_media_attachments: Keyword.get(instance, :max_media_attachments), poll_limits: Keyword.get(instance, :poll_limits), upload_limit: Keyword.get(instance, :upload_limit), avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit), |