From 5de4099cba2cf012d4a213c8eb29c412fc72c151 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 16 Nov 2025 14:13:21 +0100 Subject: [PATCH 1/5] fix: exit 0 when gracefully shutting down (#5555) --- cmd/root.go | 14 +------------ cmd/utils.go | 1 - errors/errors.go | 54 ------------------------------------------------ main.go | 3 +-- 4 files changed, 2 insertions(+), 70 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 24f5d077..0d103b29 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -26,7 +26,6 @@ import ( "github.com/filebrowser/filebrowser/v2/auth" "github.com/filebrowser/filebrowser/v2/diskcache" - fbErrors "github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/frontend" fbhttp "github.com/filebrowser/filebrowser/v2/http" "github.com/filebrowser/filebrowser/v2/img" @@ -241,18 +240,7 @@ user created with the credentials from options "username" and "password".`, } log.Println("Graceful shutdown complete.") - switch sig { - case syscall.SIGHUP: - d.err = fbErrors.ErrSighup - case syscall.SIGINT: - d.err = fbErrors.ErrSigint - case syscall.SIGQUIT: - d.err = fbErrors.ErrSigquit - case syscall.SIGTERM: - d.err = fbErrors.ErrSigTerm - } - - return d.err + return nil }, pythonConfig{allowNoDB: true}), } diff --git a/cmd/utils.go b/cmd/utils.go index cc718341..3ed5c989 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -66,7 +66,6 @@ type pythonConfig struct { type pythonData struct { hadDB bool store *storage.Storage - err error } func dbExists(path string) (bool, error) { diff --git a/errors/errors.go b/errors/errors.go index f8abee59..5fd760c2 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -3,15 +3,6 @@ package errors import ( "errors" "fmt" - "os" - "syscall" -) - -const ( - ExitCodeSigTerm = 128 + int(syscall.SIGTERM) - ExitCodeSighup = 128 + int(syscall.SIGHUP) - ExitCodeSigint = 128 + int(syscall.SIGINT) - ExitCodeSigquit = 128 + int(syscall.SIGQUIT) ) var ( @@ -31,10 +22,6 @@ var ( ErrInvalidRequestParams = errors.New("invalid request params") ErrSourceIsParent = errors.New("source is parent") ErrRootUserDeletion = errors.New("user with id 1 can't be deleted") - ErrSigTerm = errors.New("exit on signal: sigterm") - ErrSighup = errors.New("exit on signal: sighup") - ErrSigint = errors.New("exit on signal: sigint") - ErrSigquit = errors.New("exit on signal: sigquit") ) type ErrShortPassword struct { @@ -44,44 +31,3 @@ type ErrShortPassword struct { func (e ErrShortPassword) Error() string { return fmt.Sprintf("password is too short, minimum length is %d", e.MinimumLength) } - -// GetExitCode returns the exit code for a given error. -func GetExitCode(err error) int { - if err == nil { - return 0 - } - - exitCodeMap := map[error]int{ - ErrSigTerm: ExitCodeSigTerm, - ErrSighup: ExitCodeSighup, - ErrSigint: ExitCodeSigint, - ErrSigquit: ExitCodeSigquit, - } - - for e, code := range exitCodeMap { - if errors.Is(err, e) { - return code - } - } - - if exitErr, ok := err.(interface{ ExitCode() int }); ok { - return exitErr.ExitCode() - } - - var pathErr *os.PathError - if errors.As(err, &pathErr) { - return 1 - } - - var syscallErr *os.SyscallError - if errors.As(err, &syscallErr) { - return 1 - } - - var errno syscall.Errno - if errors.As(err, &errno) { - return 1 - } - - return 1 -} diff --git a/main.go b/main.go index d17550c9..bde39461 100644 --- a/main.go +++ b/main.go @@ -4,11 +4,10 @@ import ( "os" "github.com/filebrowser/filebrowser/v2/cmd" - "github.com/filebrowser/filebrowser/v2/errors" ) func main() { if err := cmd.Execute(); err != nil { - os.Exit(errors.GetExitCode(err)) + os.Exit(1) } } From e24e1f1abae9e80add620c4ad65660ca1b575a49 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 16 Nov 2025 14:13:58 +0100 Subject: [PATCH 2/5] feat: add TUS settings to the command line (#5556) --- cmd/config.go | 10 ++++++++-- cmd/config_init.go | 14 ++++++++++++++ cmd/config_set.go | 4 ++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/cmd/config.go b/cmd/config.go index 84474f4c..6b739610 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -52,8 +52,11 @@ func addConfigFlags(flags *pflag.FlagSet) { flags.Bool("branding.disableUsedPercentage", false, "disable used disk percentage graph") // NB: these are string so they can be presented as octal in the help text // as that's the conventional representation for modes in Unix. - flags.String("file-mode", fmt.Sprintf("%O", settings.DefaultFileMode), "Mode bits that new files are created with") - flags.String("dir-mode", fmt.Sprintf("%O", settings.DefaultDirMode), "Mode bits that new directories are created with") + flags.String("file-mode", fmt.Sprintf("%O", settings.DefaultFileMode), "mode bits that new files are created with") + flags.String("dir-mode", fmt.Sprintf("%O", settings.DefaultDirMode), "mode bits that new directories are created with") + + flags.Uint64("tus.chunkSize", settings.DefaultTusChunkSize, "the tus chunk size") + flags.Uint16("tus.retryCount", settings.DefaultTusRetryCount, "the tus retry count") } func getAuthMethod(flags *pflag.FlagSet, defaults ...interface{}) (settings.AuthMethod, map[string]interface{}, error) { @@ -215,6 +218,9 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "\tTLS Cert:\t%s\n", ser.TLSCert) fmt.Fprintf(w, "\tTLS Key:\t%s\n", ser.TLSKey) fmt.Fprintf(w, "\tExec Enabled:\t%t\n", ser.EnableExec) + fmt.Fprintln(w, "\nTUS:") + fmt.Fprintf(w, "\tChunk size:\t%d\n", set.Tus.ChunkSize) + fmt.Fprintf(w, "\tRetry count:\t%d\n", set.Tus.RetryCount) fmt.Fprintln(w, "\nDefaults:") fmt.Fprintf(w, "\tScope:\t%s\n", set.Defaults.Scope) fmt.Fprintf(w, "\tHideDotfiles:\t%t\n", set.Defaults.HideDotfiles) diff --git a/cmd/config_init.go b/cmd/config_init.go index 693b6ace..47d02d8a 100644 --- a/cmd/config_init.go +++ b/cmd/config_init.go @@ -86,6 +86,16 @@ override the options.`, return err } + tusChunkSize, err := flags.GetUint64("tus.chunkSize") + if err != nil { + return err + } + + tusRetryCount, err := flags.GetUint16("tus.retryCount") + if err != nil { + return err + } + s := &settings.Settings{ Key: key, Signup: signup, @@ -102,6 +112,10 @@ override the options.`, Theme: brandingTheme, Files: brandingFiles, }, + Tus: settings.Tus{ + ChunkSize: tusChunkSize, + RetryCount: tusRetryCount, + }, } s.FileMode, err = getMode(flags, "file-mode") diff --git a/cmd/config_set.go b/cmd/config_set.go index 255ef470..c362e2e1 100644 --- a/cmd/config_set.go +++ b/cmd/config_set.go @@ -80,6 +80,10 @@ you want to change. Other options will remain unchanged.`, set.FileMode, err = getMode(flags, flag.Name) case "dir-mode": set.DirMode, err = getMode(flags, flag.Name) + case "tus.chunkSize": + set.Tus.ChunkSize, err = flags.GetUint64(flag.Name) + case "tus.retryCount": + set.Tus.RetryCount, err = flags.GetUint16(flag.Name) } }) From 0fadaccaa2e2715c7917a2e26f1a47528cf1810d Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 16 Nov 2025 14:28:03 +0100 Subject: [PATCH 3/5] chore(docs): update CLI documentation --- www/docs/cli/filebrowser-config-init.md | 6 ++++-- www/docs/cli/filebrowser-config-set.md | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/www/docs/cli/filebrowser-config-init.md b/www/docs/cli/filebrowser-config-init.md index f317c9a0..126082d0 100644 --- a/www/docs/cli/filebrowser-config-init.md +++ b/www/docs/cli/filebrowser-config-init.md @@ -34,12 +34,12 @@ filebrowser config init [flags] --commands strings a list of the commands a user can execute --create-user-dir generate user's home directory automatically --dateFormat use date format (true for absolute time, false for relative) - --dir-mode string Mode bits that new directories are created with (default "0o750") + --dir-mode string mode bits that new directories are created with (default "0o750") --disable-exec disables Command Runner feature (default true) --disable-preview-resize disable resize of image previews --disable-thumbnails disable image thumbnails --disable-type-detection-by-header disables type detection by reading file headers - --file-mode string Mode bits that new files are created with (default "0o640") + --file-mode string mode bits that new files are created with (default "0o640") -h, --help help for init --hide-login-button hide login button from public pages --hideDotfiles hide dotfiles @@ -71,6 +71,8 @@ filebrowser config init [flags] --sorting.asc sorting by ascending order --sorting.by string sorting mode (name, size or modified) (default "name") --token-expiration-time string user session timeout (default "2h") + --tus.chunkSize uint the tus chunk size (default 10485760) + --tus.retryCount uint16 the tus retry count (default 5) --viewMode string view mode for users (default "list") ``` diff --git a/www/docs/cli/filebrowser-config-set.md b/www/docs/cli/filebrowser-config-set.md index a396ab13..8d8ea8f5 100644 --- a/www/docs/cli/filebrowser-config-set.md +++ b/www/docs/cli/filebrowser-config-set.md @@ -31,12 +31,12 @@ filebrowser config set [flags] --commands strings a list of the commands a user can execute --create-user-dir generate user's home directory automatically --dateFormat use date format (true for absolute time, false for relative) - --dir-mode string Mode bits that new directories are created with (default "0o750") + --dir-mode string mode bits that new directories are created with (default "0o750") --disable-exec disables Command Runner feature (default true) --disable-preview-resize disable resize of image previews --disable-thumbnails disable image thumbnails --disable-type-detection-by-header disables type detection by reading file headers - --file-mode string Mode bits that new files are created with (default "0o640") + --file-mode string mode bits that new files are created with (default "0o640") -h, --help help for set --hide-login-button hide login button from public pages --hideDotfiles hide dotfiles @@ -68,6 +68,8 @@ filebrowser config set [flags] --sorting.asc sorting by ascending order --sorting.by string sorting mode (name, size or modified) (default "name") --token-expiration-time string user session timeout (default "2h") + --tus.chunkSize uint the tus chunk size (default 10485760) + --tus.retryCount uint16 the tus retry count (default 5) --viewMode string view mode for users (default "list") ``` From fb8d41eb9a4f0027bb346c4981982acac2214caf Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 16 Nov 2025 14:28:15 +0100 Subject: [PATCH 4/5] chore(release): 2.47.0 --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70d61c71..5c25523b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,19 @@ All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. +## [2.47.0](https://github.com/filebrowser/filebrowser/compare/v2.46.1...v2.47.0) (2025-11-16) + + +### Features + +* add TUS settings to the command line ([#5556](https://github.com/filebrowser/filebrowser/issues/5556)) ([e24e1f1](https://github.com/filebrowser/filebrowser/commit/e24e1f1abae9e80add620c4ad65660ca1b575a49)) +* remove importer of v1 config ([#5550](https://github.com/filebrowser/filebrowser/issues/5550)) ([ceb5e72](https://github.com/filebrowser/filebrowser/commit/ceb5e723f3ee2c966bb561a804015246450280ca)) + + +### Bug Fixes + +* exit 0 when gracefully shutting down ([#5555](https://github.com/filebrowser/filebrowser/issues/5555)) ([5de4099](https://github.com/filebrowser/filebrowser/commit/5de4099cba2cf012d4a213c8eb29c412fc72c151)) + ## [2.46.1](https://github.com/filebrowser/filebrowser/compare/v2.46.0...v2.46.1) (2025-11-15) From f89435c068110b1470f29e4cbff28c63de9b5397 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 16 Nov 2025 14:28:48 +0100 Subject: [PATCH 5/5] chore: fix taskfile --- Taskfile.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Taskfile.yml b/Taskfile.yml index 855507bc..5977dff0 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -49,6 +49,7 @@ tasks: cmds: - task: docs:cli:generate - git add www/docs/cli + - "git commit -m 'chore(docs): update CLI documentation'" - task: release:dry-run - task: release:make