Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion lib/open_drive/drive.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 17 additions & 1 deletion lib/open_drive_web/controllers/direct_upload_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
21 changes: 20 additions & 1 deletion lib/open_drive_web/endpoint.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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

Expand All @@ -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
27 changes: 0 additions & 27 deletions lib/open_drive_web/safe_code_reloader.ex

This file was deleted.

3 changes: 2 additions & 1 deletion priv/gettext/default.pot
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion priv/gettext/en/LC_MESSAGES/default.po
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions priv/gettext/pt_BR/LC_MESSAGES/default.po
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions test/open_drive/drive_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand Down
10 changes: 5 additions & 5 deletions test/open_drive_web/safe_code_reloader_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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})
Expand All @@ -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
Expand Down