diff --git a/Dockerfile b/Dockerfile index 5df9a358..21cbfe96 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,13 +12,11 @@ RUN go get -u golang.org/x/net RUN go build -ldflags="-w -s" -o filebrowser . FROM alpine:latest +ARG app="/app/filebrowser" RUN apk --no-cache add \ ca-certificates \ mailcap -VOLUME /srv -EXPOSE 8080 -WORKDIR / -COPY --from=base /app/filebrowser.yaml /filebrowser.yaml -COPY --from=base /app/filebrowser /filebrowser -COPY --from=nbuild /app/dist/ /frontend/dist/ +WORKDIR /app +COPY --from=base $app* ./ +COPY --from=nbuild /app/dist/ ./frontend/dist/ ENTRYPOINT [ "./filebrowser" ] \ No newline at end of file diff --git a/backend/auth/hook.go b/backend/auth/hook.go index 0ae5d143..9ed4bf6d 100644 --- a/backend/auth/hook.go +++ b/backend/auth/hook.go @@ -201,31 +201,31 @@ func (a *HookAuth) SaveUser() (*users.User, error) { // GetUser returns a User filled with hook values or provided defaults func (a *HookAuth) GetUser(d *users.User) *users.User { // adds all permissions when user is admin - isAdmin := a.Fields.GetBoolean("user.perm.admin", d.Perm.Admin) + isAdmin := d.Perm.Admin perms := users.Permissions{ Admin: isAdmin, - Execute: isAdmin || a.Fields.GetBoolean("user.perm.execute", d.Perm.Execute), - Create: isAdmin || a.Fields.GetBoolean("user.perm.create", d.Perm.Create), - Rename: isAdmin || a.Fields.GetBoolean("user.perm.rename", d.Perm.Rename), - Modify: isAdmin || a.Fields.GetBoolean("user.perm.modify", d.Perm.Modify), - Delete: isAdmin || a.Fields.GetBoolean("user.perm.delete", d.Perm.Delete), - Share: isAdmin || a.Fields.GetBoolean("user.perm.share", d.Perm.Share), - Download: isAdmin || a.Fields.GetBoolean("user.perm.download", d.Perm.Download), + Execute: isAdmin || d.Perm.Execute, + Create: isAdmin || d.Perm.Create, + Rename: isAdmin || d.Perm.Rename, + Modify: isAdmin || d.Perm.Modify, + Delete: isAdmin || d.Perm.Delete, + Share: isAdmin || d.Perm.Share, + Download: isAdmin || d.Perm.Download, } user := users.User{ ID: d.ID, Username: d.Username, Password: d.Password, - Scope: a.Fields.GetString("user.scope", d.Scope), - Locale: a.Fields.GetString("user.locale", d.Locale), + Scope: d.Scope, + Locale: d.Locale, ViewMode: d.ViewMode, - SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick), + SingleClick: d.SingleClick, Sorting: files.Sorting{ - Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc), - By: a.Fields.GetString("user.sorting.by", d.Sorting.By), + Asc: d.Sorting.Asc, + By: d.Sorting.By, }, - Commands: a.Fields.GetArray("user.commands", d.Commands), - HideDotfiles: a.Fields.GetBoolean("user.hideDotfiles", d.HideDotfiles), + Commands: d.Commands, + HideDotfiles: d.HideDotfiles, Perm: perms, LockPassword: true, } diff --git a/backend/cmd/root.go b/backend/cmd/root.go index 8120360a..ea70fd51 100644 --- a/backend/cmd/root.go +++ b/backend/cmd/root.go @@ -3,7 +3,6 @@ package cmd import ( "crypto/tls" "flag" - "io" "io/fs" "log" "net" @@ -17,7 +16,6 @@ import ( "github.com/spf13/afero" "github.com/spf13/cobra" - lumberjack "gopkg.in/natefinch/lumberjack.v2" "github.com/gtsteffaniak/filebrowser/auth" "github.com/gtsteffaniak/filebrowser/diskcache" @@ -56,7 +54,6 @@ var rootCmd = &cobra.Command{ if serverConfig.NumImageProcessors < 1 { log.Fatal("Image resize workers count could not be < 1") } - setupLog(serverConfig.Log) imgSvc := img.New(serverConfig.NumImageProcessors) var fileCache diskcache.Interface = diskcache.NewNoOp() cacheDir := "/tmp" @@ -67,7 +64,7 @@ var rootCmd = &cobra.Command{ fileCache = diskcache.New(afero.NewOsFs(), cacheDir) } // initialize indexing and schedule indexing ever n minutes (default 5) - index.Initialize(serverConfig.IndexingInterval) + go index.Initialize(serverConfig.IndexingInterval) _, err := os.Stat(serverConfig.Root) checkErr(err) var listener net.Listener @@ -120,24 +117,6 @@ func cleanupHandler(listener net.Listener, c chan os.Signal) { //nolint:interfac os.Exit(0) } -func setupLog(logMethod string) { - switch logMethod { - case "stdout": - log.SetOutput(os.Stdout) - case "stderr": - log.SetOutput(os.Stderr) - case "": - log.SetOutput(io.Discard) - default: - log.SetOutput(&lumberjack.Logger{ - Filename: logMethod, - MaxSize: 100, - MaxAge: 14, - MaxBackups: 10, - }) - } -} - func quickSetup(d pythonData) { settings.GlobalConfiguration.Key = generateKey() if settings.GlobalConfiguration.Auth.Method == "noauth" { @@ -162,6 +141,7 @@ func quickSetup(d pythonData) { Password: password, LockPassword: false, } + settings.GlobalConfiguration.UserDefaults.Apply(user) user.Perm.Admin = true err = d.store.Users.Save(user) checkErr(err) diff --git a/backend/filebrowser.yaml b/backend/filebrowser.yaml index 7e2d4f48..d854c039 100644 --- a/backend/filebrowser.yaml +++ b/backend/filebrowser.yaml @@ -5,29 +5,17 @@ server: auth: method: noauth signup: true +userDefaults: + scope: "." + hideDotfiles: true + singleClick: false + permissions: + admin: false + create: true + rename: true + modify: true + delete: true + share: true + download: true frontend: - theme: dark -Users: - admin: - rules: - - regex: false - allow: true - path: test - regexp: - raw: '' - - regex: true - allow: true - path: '' - regexp: - raw: test - scope: "." - hideDotfiles: true - singleClick: false - permissions: - admin: false - create: true - rename: true - modify: true - delete: true - share: true - download: true \ No newline at end of file + theme: dark \ No newline at end of file diff --git a/backend/settings/config.go b/backend/settings/config.go index d201ef58..cca470db 100644 --- a/backend/settings/config.go +++ b/backend/settings/config.go @@ -80,3 +80,16 @@ func setDefaults() Settings { }, } } + +// Apply applies the default options to a user. +func (d *UserDefaults) Apply(u *users.User) { + u.Scope = d.Scope + u.Locale = d.Locale + u.ViewMode = d.ViewMode + u.SingleClick = d.SingleClick + u.Perm = d.Perm + u.Sorting = d.Sorting + u.Commands = d.Commands + u.HideDotfiles = d.HideDotfiles + u.DateFormat = d.DateFormat +} diff --git a/frontend/.eslintrc.yml b/frontend/.eslintrc.yml index 1ff16569..e536ba99 100644 --- a/frontend/.eslintrc.yml +++ b/frontend/.eslintrc.yml @@ -11,5 +11,6 @@ plugins: - vue rules: vue/multi-word-component-names: off - vue/no-reserved-component-names: "warn" + vue/no-reserved-component-names: warn vue/no-mutating-props: off + vue/no-deprecated-v-bind-sync: warn diff --git a/frontend/src/components/settings/UserForm.vue b/frontend/src/components/settings/UserForm.vue index 376df66a..b6bd3877 100644 --- a/frontend/src/components/settings/UserForm.vue +++ b/frontend/src/components/settings/UserForm.vue @@ -42,7 +42,7 @@

@@ -55,13 +55,13 @@ {{ $t("settings.lockPassword") }}

- - + +

{{ $t("settings.rules") }}

{{ $t("settings.rulesHelp") }}

- +
diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index 9c62d61a..ff1618f7 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -29,7 +29,7 @@

{{ $t("settings.rules") }}

{{ $t("settings.globalRules") }}

- +

{{ $t("settings.executeOnShell") }}

@@ -75,7 +75,7 @@

@@ -125,7 +125,7 @@
diff --git a/frontend/src/views/settings/Profile.vue b/frontend/src/views/settings/Profile.vue index 6800084e..4002e08c 100644 --- a/frontend/src/views/settings/Profile.vue +++ b/frontend/src/views/settings/Profile.vue @@ -22,7 +22,7 @@

{{ $t("settings.language") }}

diff --git a/frontend/src/views/settings/User.vue b/frontend/src/views/settings/User.vue index dcdeaaea..95d0352a 100644 --- a/frontend/src/views/settings/User.vue +++ b/frontend/src/views/settings/User.vue @@ -10,8 +10,8 @@