diff --git a/assets/js/app.js b/assets/js/app.js index d29b9be..b57f14e 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -372,7 +372,7 @@ const Hooks = { if (file.size > this.maxFileSize) { entry.status = "error"; - entry.error = "Arquivo excede o limite de 2 GB."; + entry.error = `Arquivo excede o limite de ${this.formatBytes(this.maxFileSize)}.`; this.renderEntry(entry); this.syncStats(); return; diff --git a/lib/open_drive/drive.ex b/lib/open_drive/drive.ex index 78c1a76..7622cd1 100644 --- a/lib/open_drive/drive.ex +++ b/lib/open_drive/drive.ex @@ -13,7 +13,7 @@ defmodule OpenDrive.Drive do alias OpenDrive.Repo alias OpenDrive.Storage - @max_upload_file_size 2_000_000_000 + @max_upload_file_size 5_000_000_000 # Browser fallback stores multipart bodies on the Phoenix host before sending # them to storage, so keep it limited to small files and prefer direct upload. @backend_upload_fallback_size 25_000_000 diff --git a/lib/open_drive_web/controllers/direct_upload_controller.ex b/lib/open_drive_web/controllers/direct_upload_controller.ex index fb63714..8399305 100644 --- a/lib/open_drive_web/controllers/direct_upload_controller.ex +++ b/lib/open_drive_web/controllers/direct_upload_controller.ex @@ -5,6 +5,7 @@ defmodule OpenDriveWeb.DirectUploadController do @token_salt "direct-upload" @backend_upload_fallback_size Drive.backend_upload_fallback_size() + @max_upload_file_size Drive.max_upload_file_size() def create(conn, %{"upload" => upload_params}) do case Drive.prepare_direct_upload(conn.assigns.current_scope, upload_params) do @@ -90,7 +91,12 @@ defmodule OpenDriveWeb.DirectUploadController do defp render_error(conn, :too_large) do conn |> put_status(:unprocessable_entity) - |> json(%{error: gettext("File exceeds the 2 GB limit.")}) + |> json(%{ + error: + gettext("File exceeds the %{size} limit.", + size: format_gigabytes(@max_upload_file_size) + ) + }) end defp render_error(conn, :proxy_too_large) do @@ -183,4 +189,14 @@ defmodule OpenDriveWeb.DirectUploadController do end defp format_bytes(size), do: "#{size} B" + + defp format_gigabytes(size) do + gigabytes = Float.round(size / 1_000_000_000, 1) + + if gigabytes == trunc(gigabytes) do + "#{trunc(gigabytes)} GB" + else + "#{gigabytes} GB" + end + end end diff --git a/lib/open_drive_web/endpoint.ex b/lib/open_drive_web/endpoint.ex index 6b53bf7..a7e40bb 100644 --- a/lib/open_drive_web/endpoint.ex +++ b/lib/open_drive_web/endpoint.ex @@ -2,6 +2,7 @@ defmodule OpenDriveWeb.Endpoint do use Phoenix.Endpoint, otp_app: :open_drive @max_request_body_length OpenDrive.Drive.backend_upload_fallback_size() + require Logger # The session will be stored in the cookie and signed, # this means its contents can be read but not tampered with. @@ -34,7 +35,7 @@ defmodule OpenDriveWeb.Endpoint do if code_reloading? do socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket plug Phoenix.LiveReloader - plug OpenDriveWeb.SafeCodeReloader + plug :safe_code_reloader plug Phoenix.Ecto.CheckRepoStatus, otp_app: :open_drive end @@ -55,4 +56,22 @@ defmodule OpenDriveWeb.Endpoint do plug Plug.Head plug Plug.Session, @session_options plug OpenDriveWeb.Router + + def safe_code_reloader_init(opts) do + opts + |> Keyword.put_new(:server, Phoenix.CodeReloader.Server) + |> Phoenix.CodeReloader.init() + end + + def safe_code_reloader(conn, opts) do + if Process.whereis(opts[:server]) do + Phoenix.CodeReloader.call(conn, opts) + else + Logger.warning( + "Phoenix.CodeReloader.Server is not running; skipping code reload for this request" + ) + + conn + end + end end diff --git a/lib/open_drive_web/safe_code_reloader.ex b/lib/open_drive_web/safe_code_reloader.ex deleted file mode 100644 index 6a1173a..0000000 --- a/lib/open_drive_web/safe_code_reloader.ex +++ /dev/null @@ -1,27 +0,0 @@ -defmodule OpenDriveWeb.SafeCodeReloader do - @moduledoc false - - @behaviour Plug - - require Logger - - @impl true - def init(opts) do - opts - |> Keyword.put_new(:server, Phoenix.CodeReloader.Server) - |> Phoenix.CodeReloader.init() - end - - @impl true - def call(conn, opts) do - if Process.whereis(opts[:server]) do - Phoenix.CodeReloader.call(conn, opts) - else - Logger.warning( - "Phoenix.CodeReloader.Server is not running; skipping code reload for this request" - ) - - conn - end - end -end diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index c8d3f4c..eb60bb5 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -1502,7 +1502,8 @@ msgstr "" #: lib/open_drive_web/controllers/direct_upload_controller.ex:78 #, elixir-autogen, elixir-format -msgid "File exceeds the 2 GB limit." +msgid "File exceeds the %{size} limit." +msgstr "" msgstr "" #: lib/open_drive_web/controllers/file_download_controller.ex:13 diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index da56ea0..ae77a15 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -1494,7 +1494,7 @@ msgstr "" #: lib/open_drive_web/controllers/direct_upload_controller.ex:78 #, elixir-autogen, elixir-format -msgid "File exceeds the 2 GB limit." +msgid "File exceeds the %{size} limit." msgstr "" #: lib/open_drive_web/controllers/file_download_controller.ex:13 diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index f995812..5e94f81 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -1494,8 +1494,8 @@ msgstr "A pasta %{name} sera enviada para a lixeira." #: lib/open_drive_web/controllers/direct_upload_controller.ex:78 #, elixir-autogen, elixir-format -msgid "File exceeds the 2 GB limit." -msgstr "Arquivo excede o limite de 2 GB." +msgid "File exceeds the %{size} limit." +msgstr "Arquivo excede o limite de %{size}." #: lib/open_drive_web/controllers/file_download_controller.ex:13 #: lib/open_drive_web/live/drive_live/index.ex:335 diff --git a/test/open_drive/drive_test.exs b/test/open_drive/drive_test.exs index 40ff4e1..bf8d570 100644 --- a/test/open_drive/drive_test.exs +++ b/test/open_drive/drive_test.exs @@ -760,7 +760,7 @@ defmodule OpenDrive.DriveTest do Drive.prepare_direct_upload(workspace.scope, %{ "name" => "video.mp4", "content_type" => "video/mp4", - "size" => "2000000001" + "size" => "5000000001" }) end @@ -774,7 +774,7 @@ defmodule OpenDrive.DriveTest do path: path, client_name: "huge.txt", content_type: "text/plain", - size: 2_000_000_001 + size: 5_000_000_001 }) end diff --git a/test/open_drive_web/safe_code_reloader_test.exs b/test/open_drive_web/safe_code_reloader_test.exs index 92b2c0f..fde1195 100644 --- a/test/open_drive_web/safe_code_reloader_test.exs +++ b/test/open_drive_web/safe_code_reloader_test.exs @@ -4,11 +4,11 @@ defmodule OpenDriveWeb.SafeCodeReloaderTest do import Plug.Conn import Plug.Test - alias OpenDriveWeb.SafeCodeReloader + alias OpenDriveWeb.Endpoint test "skips reloading when the code reloader server is unavailable" do opts = - SafeCodeReloader.init( + Endpoint.safe_code_reloader_init( server: OpenDriveWeb.MissingCodeReloaderServer, reloader: fn _, _ -> send(self(), :reloader_called) @@ -21,7 +21,7 @@ defmodule OpenDriveWeb.SafeCodeReloaderTest do |> conn("/") |> put_private(:phoenix_endpoint, OpenDriveWeb.Endpoint) - returned_conn = SafeCodeReloader.call(conn, opts) + returned_conn = Endpoint.safe_code_reloader(conn, opts) refute_received :reloader_called assert returned_conn == conn @@ -32,7 +32,7 @@ defmodule OpenDriveWeb.SafeCodeReloaderTest do Process.register(server, OpenDriveWeb.AvailableCodeReloaderServer) opts = - SafeCodeReloader.init( + Endpoint.safe_code_reloader_init( server: OpenDriveWeb.AvailableCodeReloaderServer, reloader: fn _, _ -> send(self(), {:reloader_called, server}) @@ -45,7 +45,7 @@ defmodule OpenDriveWeb.SafeCodeReloaderTest do |> conn("/") |> put_private(:phoenix_endpoint, OpenDriveWeb.Endpoint) - returned_conn = SafeCodeReloader.call(conn, opts) + returned_conn = Endpoint.safe_code_reloader(conn, opts) assert_received {:reloader_called, ^server} assert returned_conn == conn