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 @@
{{ $t("settings.rulesHelp") }}
-{{ $t("settings.globalRules") }}
-