Fix perms (#39)

This commit is contained in:
Graham Steffaniak 2023-09-30 12:50:20 -05:00 committed by GitHub
parent 65159848c2
commit 8261511881
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 59 additions and 79 deletions

View File

@ -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" ]

View File

@ -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,
}

View File

@ -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)

View File

@ -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
theme: dark

View File

@ -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
}

View File

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

View File

@ -42,7 +42,7 @@
<languages
class="input input--block"
id="locale"
v-model:locale="user.locale"
:locale.sync="user.locale"
></languages>
</p>
@ -55,13 +55,13 @@
{{ $t("settings.lockPassword") }}
</p>
<permissions v-model:perm="user.perm" />
<commands v-if="isExecEnabled" v-model:commands="user.commands" />
<permissions :perm.sync="user.perm" />
<commands v-if="isExecEnabled" :commands.sync="user.commands" />
<div v-if="!isDefault">
<h3>{{ $t("settings.rules") }}</h3>
<p class="small">{{ $t("settings.rulesHelp") }}</p>
<rules v-model:rules="user.rules" />
<rules :rules.sync="user.rules" />
</div>
</div>
</template>

View File

@ -29,7 +29,7 @@
<h3>{{ $t("settings.rules") }}</h3>
<p class="small">{{ $t("settings.globalRules") }}</p>
<rules v-model:rules="settings.rules" />
<rules :rules.sync="settings.rules" />
<div v-if="isExecEnabled">
<h3>{{ $t("settings.executeOnShell") }}</h3>
@ -75,7 +75,7 @@
<label for="theme">{{ $t("settings.themes.title") }}</label>
<themes
class="input input--block"
v-model:theme="settings.frontend.theme"
:theme.sync="settings.frontend.theme"
id="theme"
></themes>
</p>
@ -125,7 +125,7 @@
<user-form
:isNew="false"
:isDefault="true"
v-model:user="settings.defaults"
:user.sync="settings.defaults"
/>
</div>

View File

@ -22,7 +22,7 @@
<h3>{{ $t("settings.language") }}</h3>
<languages
class="input input--block"
v-model:locale="locale"
:locale.sync="locale"
></languages>
</div>

View File

@ -10,8 +10,8 @@
<div class="card-content">
<user-form
v-model:user="user"
v-model:createUserDir="createUserDir"
:user.sync="user"
:createUserDir.sync="createUserDir"
:isDefault="false"
:isNew="isNew"
/>