Handle maximum file sizes better

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2021-04-12 10:13:45 +02:00
parent 0210b677c5
commit 947d0b0cdb
No known key found for this signature in database
GPG key ID: A061B9DDE0CA0773

View file

@ -96,7 +96,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
# TODO Move me to somewhere cleaner # TODO Move me to somewhere cleaner
defp save_attached_pictures(args) do defp save_attached_pictures(args) do
Enum.reduce([:avatar, :banner], args, fn key, args -> Enum.reduce([:avatar, :banner], args, fn key, args ->
if Map.has_key?(args, key) && !is_nil(args[key][:media]) do if is_map(args) && Map.has_key?(args, key) && !is_nil(args[key][:media]) do
pic = args[key][:media] pic = args[key][:media]
with {:ok, %{name: name, url: url, content_type: content_type, size: _size}} <- with {:ok, %{name: name, url: url, content_type: content_type, size: _size}} <-
@ -122,14 +122,17 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
} }
) do ) do
with %Actor{id: creator_actor_id} = creator_actor <- Users.get_actor_for_user(user), with %Actor{id: creator_actor_id} = creator_actor <- Users.get_actor_for_user(user),
args <- Map.update(args, :preferred_username, "", &String.downcase/1), args when is_map(args) <- Map.update(args, :preferred_username, "", &String.downcase/1),
args <- Map.put(args, :creator_actor, creator_actor), args when is_map(args) <- Map.put(args, :creator_actor, creator_actor),
args <- Map.put(args, :creator_actor_id, creator_actor_id), args when is_map(args) <- Map.put(args, :creator_actor_id, creator_actor_id),
args <- save_attached_pictures(args), {:picture, args} when is_map(args) <- {:picture, save_attached_pictures(args)},
{:ok, _activity, %Actor{type: :Group} = group} <- {:ok, _activity, %Actor{type: :Group} = group} <-
API.Groups.create_group(args) do API.Groups.create_group(args) do
{:ok, group} {:ok, group}
else else
{:picture, {:error, :file_too_large}} ->
{:error, dgettext("errors", "The provided picture is too heavy")}
{:error, err} when is_binary(err) -> {:error, err} when is_binary(err) ->
{:error, err} {:error, err}
end end
@ -154,12 +157,15 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
with %Actor{} = updater_actor <- Users.get_actor_for_user(user), with %Actor{} = updater_actor <- Users.get_actor_for_user(user),
{:administrator, true} <- {:administrator, true} <-
{:administrator, Actors.is_administrator?(updater_actor.id, group_id)}, {:administrator, Actors.is_administrator?(updater_actor.id, group_id)},
args <- Map.put(args, :updater_actor, updater_actor), args when is_map(args) <- Map.put(args, :updater_actor, updater_actor),
args <- save_attached_pictures(args), {:picture, args} when is_map(args) <- {:picture, save_attached_pictures(args)},
{:ok, _activity, %Actor{type: :Group} = group} <- {:ok, _activity, %Actor{type: :Group} = group} <-
API.Groups.update_group(args) do API.Groups.update_group(args) do
{:ok, group} {:ok, group}
else else
{:picture, {:error, :file_too_large}} ->
{:error, dgettext("errors", "The provided picture is too heavy")}
{:error, err} when is_binary(err) -> {:error, err} when is_binary(err) ->
{:error, err} {:error, err}