From cb37a50abc6e89aae460a4da47298f6f04842fdd Mon Sep 17 00:00:00 2001 From: Graham Steffaniak <42989099+gtsteffaniak@users.noreply.github.com> Date: Sun, 24 Sep 2023 13:50:59 -0500 Subject: [PATCH 01/16] updated with rounded corners (#35) --- frontend/src/css/_buttons.css | 2 +- frontend/src/css/_inputs.css | 2 +- frontend/src/css/_share.css | 2 +- frontend/src/css/dashboard.css | 3 ++- frontend/src/css/listing.css | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/frontend/src/css/_buttons.css b/frontend/src/css/_buttons.css index 087c6286..cf53fa6e 100644 --- a/frontend/src/css/_buttons.css +++ b/frontend/src/css/_buttons.css @@ -2,7 +2,7 @@ outline: 0; border: 0; padding: .5em 1em; - border-radius: .1em; + border-radius: 1em; cursor: pointer; background: var(--blue); color: white; diff --git a/frontend/src/css/_inputs.css b/frontend/src/css/_inputs.css index 670bb426..a2e8f6e7 100644 --- a/frontend/src/css/_inputs.css +++ b/frontend/src/css/_inputs.css @@ -1,5 +1,5 @@ .input { - border-radius: .1em; + border-radius: 1em; padding: .5em 1em; background: white; border: 1px solid rgba(0, 0, 0, 0.1); diff --git a/frontend/src/css/_share.css b/frontend/src/css/_share.css index 38d70552..9854bf07 100644 --- a/frontend/src/css/_share.css +++ b/frontend/src/css/_share.css @@ -14,7 +14,7 @@ .share__box { box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px; background: #fff; - border-radius: 0.2em; + border-radius: 1em; margin: 5px; overflow: hidden; } diff --git a/frontend/src/css/dashboard.css b/frontend/src/css/dashboard.css index 869e3996..9650788d 100644 --- a/frontend/src/css/dashboard.css +++ b/frontend/src/css/dashboard.css @@ -164,6 +164,7 @@ table tr>*:last-child { border-radius: 2px; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); overflow: auto; + border-radius: 1em; } .card.floating { @@ -457,7 +458,7 @@ body.rtl .card .card-title>*:first-child { .card .card-action.full .action { flex: 1; padding: 2em; - border-radius: 0.2em; + border-radius: 1em; border: 1px solid rgba(0, 0, 0, 0.1); text-align: center; } diff --git a/frontend/src/css/listing.css b/frontend/src/css/listing.css index 389aa82a..64477d75 100644 --- a/frontend/src/css/listing.css +++ b/frontend/src/css/listing.css @@ -94,7 +94,7 @@ body.rtl #listing { width: calc(33% - 1em); margin: .5em; padding: 0.5em; - border-radius: 0.2em; + border-radius: 1em; box-shadow: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .12); } From 8cdb79c91551ab779b3fb14a309b4a896a4a1e79 Mon Sep 17 00:00:00 2001 From: Graham Steffaniak <42989099+gtsteffaniak@users.noreply.github.com> Date: Sun, 24 Sep 2023 13:57:11 -0500 Subject: [PATCH 02/16] 28 disable settings (#34) --- .github/workflows/pr-merge.yaml | 2 +- .github/workflows/release.yaml | 2 +- CHANGELOG.md | 3 +- backend/benchmark_results.txt | 22 ++++----- backend/cmd/root.go | 1 - backend/cmd/users.go | 76 ----------------------------- backend/cmd/users_add.go | 7 --- backend/cmd/users_update.go | 4 -- backend/filebrowser.yaml | 38 ++++++++++----- backend/http/auth.go | 2 - backend/settings/settings_test.go | 18 +++++-- backend/settings/structs.go | 30 ++++-------- backend/settings/testingConfig.yaml | 3 +- frontend/src/css/dashboard.css | 2 + frontend/src/views/Settings.vue | 9 +++- 15 files changed, 74 insertions(+), 145 deletions(-) diff --git a/.github/workflows/pr-merge.yaml b/.github/workflows/pr-merge.yaml index dca6c543..5dc8d4b8 100644 --- a/.github/workflows/pr-merge.yaml +++ b/.github/workflows/pr-merge.yaml @@ -4,7 +4,7 @@ on: pull_request: branches: - 'main' - - 'v\d+.\d+.\d+' + - 'v[0-9]+.[0-9]+.[0-9]+' jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 175e205c..dbda10e3 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -3,7 +3,7 @@ name: release on: push: branches: - - 'v\d+.\d+.\d+' + - 'v[0-9]+.[0-9]+.[0-9]+' jobs: test: runs-on: ubuntu-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eb36e2d..4c0aa3da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,10 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +# v0.2.1 + - issue #29 - Rules can now be configured and read from configuration yaml # v0.2.0 - - improved UI - more unified coehisive look - Adjusted header bar look and icon behavior diff --git a/backend/benchmark_results.txt b/backend/benchmark_results.txt index 962ad6ff..5c7697d9 100644 --- a/backend/benchmark_results.txt +++ b/backend/benchmark_results.txt @@ -10,16 +10,16 @@ ok github.com/gtsteffaniak/filebrowser/diskcache 0.003s ? github.com/gtsteffaniak/filebrowser/files [no test files] PASS ok github.com/gtsteffaniak/filebrowser/fileutils 0.003s -2023/09/10 09:17:55 h: 401 -2023/09/10 09:17:55 h: 401 -2023/09/10 09:17:55 h: 401 -2023/09/10 09:17:56 h: 401 -2023/09/10 09:17:56 h: 401 -2023/09/10 09:17:56 h: 401 +2023/09/24 12:52:05 h: 401 +2023/09/24 12:52:05 h: 401 +2023/09/24 12:52:05 h: 401 +2023/09/24 12:52:05 h: 401 +2023/09/24 12:52:05 h: 401 +2023/09/24 12:52:05 h: 401 PASS -ok github.com/gtsteffaniak/filebrowser/http 0.082s +ok github.com/gtsteffaniak/filebrowser/http 0.094s PASS -ok github.com/gtsteffaniak/filebrowser/img 0.118s +ok github.com/gtsteffaniak/filebrowser/img 0.144s PASS ok github.com/gtsteffaniak/filebrowser/rules 0.002s PASS @@ -28,10 +28,10 @@ goos: linux goarch: amd64 pkg: github.com/gtsteffaniak/filebrowser/search cpu: 11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz -BenchmarkSearchAllIndexes-8 10 5311144 ns/op 2934075 B/op 44569 allocs/op -BenchmarkFillIndex-8 10 3142607 ns/op 18473 B/op 452 allocs/op +BenchmarkSearchAllIndexes-8 10 5912685 ns/op 3003976 B/op 46139 allocs/op +BenchmarkFillIndex-8 10 3157995 ns/op 18370 B/op 449 allocs/op PASS -ok github.com/gtsteffaniak/filebrowser/search 0.110s +ok github.com/gtsteffaniak/filebrowser/search 0.116s PASS ok github.com/gtsteffaniak/filebrowser/settings 0.005s ? github.com/gtsteffaniak/filebrowser/share [no test files] diff --git a/backend/cmd/root.go b/backend/cmd/root.go index 483affb0..e3ec1375 100644 --- a/backend/cmd/root.go +++ b/backend/cmd/root.go @@ -172,7 +172,6 @@ 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/cmd/users.go b/backend/cmd/users.go index 1f50cf74..0d214456 100644 --- a/backend/cmd/users.go +++ b/backend/cmd/users.go @@ -1,16 +1,13 @@ package cmd import ( - "errors" "fmt" "os" "strconv" "text/tabwriter" "github.com/spf13/cobra" - "github.com/spf13/pflag" - "github.com/gtsteffaniak/filebrowser/settings" "github.com/gtsteffaniak/filebrowser/users" ) @@ -59,76 +56,3 @@ func parseUsernameOrID(arg string) (username string, id uint) { } return "", uint(id64) } - -func addUserFlags(flags *pflag.FlagSet) { - flags.Bool("perm.admin", false, "admin perm for users") - flags.Bool("perm.execute", true, "execute perm for users") - flags.Bool("perm.create", true, "create perm for users") - flags.Bool("perm.rename", true, "rename perm for users") - flags.Bool("perm.modify", true, "modify perm for users") - flags.Bool("perm.delete", true, "delete perm for users") - flags.Bool("perm.share", true, "share perm for users") - flags.Bool("perm.download", true, "download perm for users") - flags.String("sorting.by", "name", "sorting mode (name, size or modified)") - flags.Bool("sorting.asc", false, "sorting by ascending order") - flags.Bool("lockPassword", false, "lock password") - flags.StringSlice("commands", nil, "a list of the commands a user can execute") - flags.String("scope", ".", "scope for users") - flags.String("locale", "en", "locale for users") - flags.String("viewMode", string(users.ListViewMode), "view mode for users") - flags.Bool("singleClick", false, "use single clicks only") -} - -func getViewMode(flags *pflag.FlagSet) string { - viewMode := settings.GlobalConfiguration.UserDefaults.ViewMode - if viewMode != users.ListViewMode && viewMode != users.MosaicViewMode { - checkErr(errors.New("view mode must be \"" + string(users.ListViewMode) + "\" or \"" + string(users.MosaicViewMode) + "\"")) - } - return viewMode -} - -//nolint:gocyclo -func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all bool) { - visit := func(flag *pflag.Flag) { - switch flag.Name { - case "scope": - defaults.Scope = mustGetString(flags, flag.Name) - case "locale": - defaults.Locale = mustGetString(flags, flag.Name) - case "viewMode": - defaults.ViewMode = getViewMode(flags) - case "singleClick": - defaults.SingleClick = mustGetBool(flags, flag.Name) - case "perm.admin": - defaults.Perm.Admin = mustGetBool(flags, flag.Name) - case "perm.execute": - defaults.Perm.Execute = mustGetBool(flags, flag.Name) - case "perm.create": - defaults.Perm.Create = mustGetBool(flags, flag.Name) - case "perm.rename": - defaults.Perm.Rename = mustGetBool(flags, flag.Name) - case "perm.modify": - defaults.Perm.Modify = mustGetBool(flags, flag.Name) - case "perm.delete": - defaults.Perm.Delete = mustGetBool(flags, flag.Name) - case "perm.share": - defaults.Perm.Share = mustGetBool(flags, flag.Name) - case "perm.download": - defaults.Perm.Download = mustGetBool(flags, flag.Name) - case "commands": - commands, err := flags.GetStringSlice(flag.Name) - checkErr(err) - defaults.Commands = commands - case "sorting.by": - defaults.Sorting.By = mustGetString(flags, flag.Name) - case "sorting.asc": - defaults.Sorting.Asc = mustGetBool(flags, flag.Name) - } - } - - if all { - flags.VisitAll(visit) - } else { - flags.Visit(visit) - } -} diff --git a/backend/cmd/users_add.go b/backend/cmd/users_add.go index 0ba430eb..5eeb20e0 100644 --- a/backend/cmd/users_add.go +++ b/backend/cmd/users_add.go @@ -8,7 +8,6 @@ import ( func init() { usersCmd.AddCommand(usersAddCmd) - addUserFlags(usersAddCmd.Flags()) } var usersAddCmd = &cobra.Command{ @@ -17,9 +16,6 @@ var usersAddCmd = &cobra.Command{ Long: `Create a new user and add it to the database.`, Args: cobra.ExactArgs(2), //nolint:gomnd Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) - password, err := users.HashPwd(args[1]) checkErr(err) @@ -28,9 +24,6 @@ var usersAddCmd = &cobra.Command{ Password: password, LockPassword: mustGetBool(cmd.Flags(), "lockPassword"), } - - s.UserDefaults.Apply(user) - servSettings, err := d.store.Settings.GetServer() checkErr(err) // since getUserDefaults() polluted s.Defaults.Scope diff --git a/backend/cmd/users_update.go b/backend/cmd/users_update.go index 707077e5..ac314d60 100644 --- a/backend/cmd/users_update.go +++ b/backend/cmd/users_update.go @@ -8,10 +8,6 @@ import ( func init() { usersCmd.AddCommand(usersUpdateCmd) - - usersUpdateCmd.Flags().StringP("password", "p", "", "new password") - usersUpdateCmd.Flags().StringP("username", "u", "", "new username") - addUserFlags(usersUpdateCmd.Flags()) } var usersUpdateCmd = &cobra.Command{ diff --git a/backend/filebrowser.yaml b/backend/filebrowser.yaml index 173bb397..4a36e28f 100644 --- a/backend/filebrowser.yaml +++ b/backend/filebrowser.yaml @@ -4,17 +4,29 @@ 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 \ No newline at end of file + 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 diff --git a/backend/http/auth.go b/backend/http/auth.go index 88146217..2a42e05b 100644 --- a/backend/http/auth.go +++ b/backend/http/auth.go @@ -145,8 +145,6 @@ var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, Username: info.Username, } - d.settings.UserDefaults.Apply(user) - pwd, err := users.HashPwd(info.Password) if err != nil { return http.StatusInternalServerError, err diff --git a/backend/settings/settings_test.go b/backend/settings/settings_test.go index e2c192ee..873ab6b7 100644 --- a/backend/settings/settings_test.go +++ b/backend/settings/settings_test.go @@ -34,11 +34,19 @@ func TestConfigLoadSpecificValues(t *testing.T) { if err != nil { log.Fatalf("Error unmarshaling YAML data: %v", err) } - - if GlobalConfiguration.Auth.Method == newConfig.Auth.Method { - log.Fatalf("Differences should have been found, but were not on Auth method") + testCases := []struct { + fieldName string + globalVal interface{} + newVal interface{} + }{ + {"Auth.Method", GlobalConfiguration.Auth.Method, newConfig.Auth.Method}, + {"UserDefaults.HideDotfiles", GlobalConfiguration.UserDefaults.HideDotfiles, newConfig.UserDefaults.HideDotfiles}, + {"Server.Database", GlobalConfiguration.Server.Database, newConfig.Server.Database}, } - if GlobalConfiguration.UserDefaults.HideDotfiles == newConfig.UserDefaults.HideDotfiles { - log.Fatalf("Differences should have been found, but were not on Auth method") + + for _, tc := range testCases { + if tc.globalVal == tc.newVal { + t.Errorf("Differences should have been found:\n\tGlobalConfig.%s: %v \n\tSetConfig: %v \n", tc.fieldName, tc.globalVal, tc.newVal) + } } } diff --git a/backend/settings/structs.go b/backend/settings/structs.go index d998de11..7cee138b 100644 --- a/backend/settings/structs.go +++ b/backend/settings/structs.go @@ -5,19 +5,6 @@ import ( "github.com/gtsteffaniak/filebrowser/users" ) -// 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 -} - type Settings struct { Key []byte `json:"key"` Signup bool `json:"signup"` @@ -31,6 +18,7 @@ type Settings struct { Server Server `json:"server"` Auth Auth `json:"auth"` Frontend Frontend `json:"frontend"` + Users []UserDefaults `json:"users,omitempty"` UserDefaults UserDefaults `json:"userDefaults"` } @@ -80,18 +68,20 @@ type Frontend struct { // UserDefaults is a type that holds the default values // for some fields on User. type UserDefaults struct { - LockPassword bool `json:"lockPassword"` - Scope string `json:"scope"` - Locale string `json:"locale"` - ViewMode string `json:"viewMode"` - SingleClick bool `json:"singleClick"` - Sorting struct { + LockPassword bool `json:"lockPassword"` + DisableSettings bool `json:"disableSettings,omitempty"` + Scope string `json:"scope"` + Locale string `json:"locale"` + ViewMode string `json:"viewMode"` + SingleClick bool `json:"singleClick"` + Rules []rules.Rule `json:"rules"` + Sorting struct { By string `json:"by"` Asc bool `json:"asc"` } `json:"sorting"` Perm users.Permissions `json:"perm"` Permissions users.Permissions `json:"permissions"` - Commands []string `json:"commands"` + Commands []string `json:"commands,omitemptys"` HideDotfiles bool `json:"hideDotfiles"` DateFormat bool `json:"dateFormat"` } diff --git a/backend/settings/testingConfig.yaml b/backend/settings/testingConfig.yaml index a45f930e..9e874e0c 100644 --- a/backend/settings/testingConfig.yaml +++ b/backend/settings/testingConfig.yaml @@ -11,7 +11,7 @@ server: baseURL: "/" address: "" log: "stdout" - database: "database.db" + database: "mydb.db" root: "/srv" auth: recaptcha: @@ -47,6 +47,5 @@ userDefaults: delete: true share: true download: true - commands: [] hideDotfiles: false dateFormat: false diff --git a/frontend/src/css/dashboard.css b/frontend/src/css/dashboard.css index 9650788d..d0118d37 100644 --- a/frontend/src/css/dashboard.css +++ b/frontend/src/css/dashboard.css @@ -6,6 +6,7 @@ display: flex; margin: 0 -.5em; flex-wrap: wrap; + justify-content: center; } body.rtl .dashboard .row { @@ -61,6 +62,7 @@ p code { .dashboard #nav .wrapper { display: flex; flex-grow: 1; + justify-content: center; border-bottom: 2px solid rgba(0, 0, 0, 0.05); } diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index 55c03f29..6389c2ca 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -1,7 +1,10 @@