From 43bf5b6f51a9d432b34ef3c1a8bea2c196fdd105 Mon Sep 17 00:00:00 2001 From: Graham Steffaniak Date: Sat, 2 Sep 2023 10:52:34 -0500 Subject: [PATCH] updated --- backend/auth/hook.go | 18 +-- backend/cmd/cmd.go | 12 -- backend/cmd/cmds.go | 26 --- backend/cmd/cmds_add.go | 27 ---- backend/cmd/cmds_ls.go | 31 ---- backend/cmd/cmds_rm.go | 56 ------- backend/cmd/config.go | 30 ++-- backend/cmd/config_set.go | 2 +- backend/cmd/root.go | 4 +- backend/cmd/upgrade.go | 31 ---- backend/cmd/users.go | 4 +- backend/cmd/users_add.go | 4 +- backend/http/auth.go | 4 +- backend/http/settings.go | 4 +- backend/settings/storage.go | 12 +- backend/settings/structs.go | 100 ++++-------- backend/storage/bolt/importer/conf.go | 187 ---------------------- backend/storage/bolt/importer/importer.go | 41 ----- backend/storage/bolt/importer/users.go | 114 ------------- backend/users/users.go | 11 +- 20 files changed, 78 insertions(+), 640 deletions(-) delete mode 100644 backend/cmd/cmd.go delete mode 100644 backend/cmd/cmds.go delete mode 100644 backend/cmd/cmds_add.go delete mode 100644 backend/cmd/cmds_ls.go delete mode 100644 backend/cmd/cmds_rm.go delete mode 100644 backend/cmd/upgrade.go delete mode 100644 backend/storage/bolt/importer/conf.go delete mode 100644 backend/storage/bolt/importer/importer.go delete mode 100644 backend/storage/bolt/importer/users.go diff --git a/backend/auth/hook.go b/backend/auth/hook.go index 00b2a625..def9d3bc 100644 --- a/backend/auth/hook.go +++ b/backend/auth/hook.go @@ -155,14 +155,14 @@ func (a *HookAuth) SaveUser() (*users.User, error) { d := &users.User{ Username: a.Cred.Username, Password: pass, - Scope: a.Settings.Defaults.Scope, - Locale: a.Settings.Defaults.Locale, - ViewMode: a.Settings.Defaults.ViewMode, - SingleClick: a.Settings.Defaults.SingleClick, - Sorting: a.Settings.Defaults.Sorting, - Perm: a.Settings.Defaults.Perm, - Commands: a.Settings.Defaults.Commands, - HideDotfiles: a.Settings.Defaults.HideDotfiles, + Scope: a.Settings.UserDefaults.Scope, + Locale: a.Settings.UserDefaults.Locale, + ViewMode: a.Settings.UserDefaults.ViewMode, + SingleClick: a.Settings.UserDefaults.SingleClick, + Sorting: a.Settings.UserDefaults.Sorting, + Perm: a.Settings.UserDefaults.Perm, + Commands: a.Settings.UserDefaults.Commands, + HideDotfiles: a.Settings.UserDefaults.HideDotfiles, } u = a.GetUser(d) @@ -219,7 +219,7 @@ func (a *HookAuth) GetUser(d *users.User) *users.User { Password: d.Password, Scope: a.Fields.GetString("user.scope", d.Scope), Locale: a.Fields.GetString("user.locale", d.Locale), - ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))), + ViewMode: d.ViewMode, SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick), Sorting: files.Sorting{ Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc), diff --git a/backend/cmd/cmd.go b/backend/cmd/cmd.go deleted file mode 100644 index 18f52337..00000000 --- a/backend/cmd/cmd.go +++ /dev/null @@ -1,12 +0,0 @@ -package cmd - -import ( - "log" -) - -// Execute executes the commands. -func Execute() { - if err := rootCmd.Execute(); err != nil { - log.Fatal(err) - } -} diff --git a/backend/cmd/cmds.go b/backend/cmd/cmds.go deleted file mode 100644 index cf951995..00000000 --- a/backend/cmd/cmds.go +++ /dev/null @@ -1,26 +0,0 @@ -package cmd - -import ( - "fmt" - - "github.com/spf13/cobra" -) - -func init() { - rootCmd.AddCommand(cmdsCmd) -} - -var cmdsCmd = &cobra.Command{ - Use: "cmds", - Short: "Command runner management utility", - Long: `Command runner management utility.`, - Args: cobra.NoArgs, -} - -func printEvents(m map[string][]string) { - for evt, cmds := range m { - for i, cmd := range cmds { - fmt.Printf("%s(%d): %s\n", evt, i, cmd) - } - } -} diff --git a/backend/cmd/cmds_add.go b/backend/cmd/cmds_add.go deleted file mode 100644 index fd2c0dc5..00000000 --- a/backend/cmd/cmds_add.go +++ /dev/null @@ -1,27 +0,0 @@ -package cmd - -import ( - "strings" - - "github.com/spf13/cobra" -) - -func init() { - cmdsCmd.AddCommand(cmdsAddCmd) -} - -var cmdsAddCmd = &cobra.Command{ - Use: "add ", - Short: "Add a command to run on a specific event", - Long: `Add a command to run on a specific event.`, - Args: cobra.MinimumNArgs(2), //nolint:gomnd - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) - command := strings.Join(args[1:], " ") - s.Commands[args[0]] = append(s.Commands[args[0]], command) - err = d.store.Settings.Save(s) - checkErr(err) - printEvents(s.Commands) - }, pythonConfig{}), -} diff --git a/backend/cmd/cmds_ls.go b/backend/cmd/cmds_ls.go deleted file mode 100644 index 71f36382..00000000 --- a/backend/cmd/cmds_ls.go +++ /dev/null @@ -1,31 +0,0 @@ -package cmd - -import ( - "github.com/spf13/cobra" -) - -func init() { - cmdsCmd.AddCommand(cmdsLsCmd) - cmdsLsCmd.Flags().StringP("event", "e", "", "event name, without 'before' or 'after'") -} - -var cmdsLsCmd = &cobra.Command{ - Use: "ls", - Short: "List all commands for each event", - Long: `List all commands for each event.`, - Args: cobra.NoArgs, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) - evt := mustGetString(cmd.Flags(), "event") - - if evt == "" { - printEvents(s.Commands) - } else { - show := map[string][]string{} - show["before_"+evt] = s.Commands["before_"+evt] - show["after_"+evt] = s.Commands["after_"+evt] - printEvents(show) - } - }, pythonConfig{}), -} diff --git a/backend/cmd/cmds_rm.go b/backend/cmd/cmds_rm.go deleted file mode 100644 index e1f78863..00000000 --- a/backend/cmd/cmds_rm.go +++ /dev/null @@ -1,56 +0,0 @@ -package cmd - -import ( - "strconv" - - "github.com/spf13/cobra" -) - -func init() { - cmdsCmd.AddCommand(cmdsRmCmd) -} - -var cmdsRmCmd = &cobra.Command{ - Use: "rm [index_end]", - Short: "Removes a command from an event hooker", - Long: `Removes a command from an event hooker. The provided index -is the same that's printed when you run 'cmds ls'. Note -that after each removal/addition, the index of the -commands change. So be careful when removing them after each -other. - -You can also specify an optional parameter (index_end) so -you can remove all commands from 'index' to 'index_end', -including 'index_end'.`, - Args: func(cmd *cobra.Command, args []string) error { - if err := cobra.RangeArgs(2, 3)(cmd, args); err != nil { //nolint:gomnd - return err - } - - for _, arg := range args[1:] { - if _, err := strconv.Atoi(arg); err != nil { - return err - } - } - - return nil - }, - Run: python(func(cmd *cobra.Command, args []string, d pythonData) { - s, err := d.store.Settings.Get() - checkErr(err) - evt := args[0] - - i, err := strconv.Atoi(args[1]) - checkErr(err) - f := i - if len(args) == 3 { //nolint:gomnd - f, err = strconv.Atoi(args[2]) - checkErr(err) - } - - s.Commands[evt] = append(s.Commands[evt][:i], s.Commands[evt][f+1:]...) - err = d.store.Settings.Save(s) - checkErr(err) - printEvents(s.Commands) - }, pythonConfig{}), -} diff --git a/backend/cmd/config.go b/backend/cmd/config.go index 21d69d2a..9ee88b85 100644 --- a/backend/cmd/config.go +++ b/backend/cmd/config.go @@ -138,23 +138,23 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "\tTLS Key:\t%s\n", ser.TLSKey) fmt.Fprintf(w, "\tExec Enabled:\t%t\n", ser.EnableExec) fmt.Fprintln(w, "\nDefaults:") - fmt.Fprintf(w, "\tScope:\t%s\n", set.Defaults.Scope) - fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale) - fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode) - fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick) - fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " ")) + fmt.Fprintf(w, "\tScope:\t%s\n", set.UserDefaults.Scope) + fmt.Fprintf(w, "\tLocale:\t%s\n", set.UserDefaults.Locale) + fmt.Fprintf(w, "\tView mode:\t%s\n", set.UserDefaults.ViewMode) + fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.UserDefaults.SingleClick) + fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.UserDefaults.Commands, " ")) fmt.Fprintf(w, "\tSorting:\n") - fmt.Fprintf(w, "\t\tBy:\t%s\n", set.Defaults.Sorting.By) - fmt.Fprintf(w, "\t\tAsc:\t%t\n", set.Defaults.Sorting.Asc) + fmt.Fprintf(w, "\t\tBy:\t%s\n", set.UserDefaults.Sorting.By) + fmt.Fprintf(w, "\t\tAsc:\t%t\n", set.UserDefaults.Sorting.Asc) fmt.Fprintf(w, "\tPermissions:\n") - fmt.Fprintf(w, "\t\tAdmin:\t%t\n", set.Defaults.Perm.Admin) - fmt.Fprintf(w, "\t\tExecute:\t%t\n", set.Defaults.Perm.Execute) - fmt.Fprintf(w, "\t\tCreate:\t%t\n", set.Defaults.Perm.Create) - fmt.Fprintf(w, "\t\tRename:\t%t\n", set.Defaults.Perm.Rename) - fmt.Fprintf(w, "\t\tModify:\t%t\n", set.Defaults.Perm.Modify) - fmt.Fprintf(w, "\t\tDelete:\t%t\n", set.Defaults.Perm.Delete) - fmt.Fprintf(w, "\t\tShare:\t%t\n", set.Defaults.Perm.Share) - fmt.Fprintf(w, "\t\tDownload:\t%t\n", set.Defaults.Perm.Download) + fmt.Fprintf(w, "\t\tAdmin:\t%t\n", set.UserDefaults.Perm.Admin) + fmt.Fprintf(w, "\t\tExecute:\t%t\n", set.UserDefaults.Perm.Execute) + fmt.Fprintf(w, "\t\tCreate:\t%t\n", set.UserDefaults.Perm.Create) + fmt.Fprintf(w, "\t\tRename:\t%t\n", set.UserDefaults.Perm.Rename) + fmt.Fprintf(w, "\t\tModify:\t%t\n", set.UserDefaults.Perm.Modify) + fmt.Fprintf(w, "\t\tDelete:\t%t\n", set.UserDefaults.Perm.Delete) + fmt.Fprintf(w, "\t\tShare:\t%t\n", set.UserDefaults.Perm.Share) + fmt.Fprintf(w, "\t\tDownload:\t%t\n", set.UserDefaults.Perm.Download) w.Flush() b, err := json.MarshalIndent(auther, "", " ") diff --git a/backend/cmd/config_set.go b/backend/cmd/config_set.go index d7bb80d9..f30dd088 100644 --- a/backend/cmd/config_set.go +++ b/backend/cmd/config_set.go @@ -59,7 +59,7 @@ you want to change. Other options will remain unchanged.`, } }) - getUserDefaults(flags, &set.Defaults, false) + getUserDefaults(flags, &set.UserDefaults, false) // read the defaults _, auther := getAuthentication() diff --git a/backend/cmd/root.go b/backend/cmd/root.go index 774211ed..e5b10c08 100644 --- a/backend/cmd/root.go +++ b/backend/cmd/root.go @@ -209,7 +209,7 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { Signup: false, CreateUserDir: false, UserHomeBasePath: settings.DefaultUsersHomeBasePath, - Defaults: settings.UserDefaults{ + UserDefaults: settings.UserDefaults{ Scope: ".", Locale: "en", SingleClick: false, @@ -268,7 +268,7 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) { LockPassword: false, } - set.Defaults.Apply(user) + set.UserDefaults.Apply(user) user.Perm.Admin = true err = d.store.Users.Save(user) diff --git a/backend/cmd/upgrade.go b/backend/cmd/upgrade.go deleted file mode 100644 index be9769c2..00000000 --- a/backend/cmd/upgrade.go +++ /dev/null @@ -1,31 +0,0 @@ -package cmd - -import ( - "github.com/spf13/cobra" - - "github.com/gtsteffaniak/filebrowser/storage/bolt/importer" -) - -func init() { - rootCmd.AddCommand(upgradeCmd) - - upgradeCmd.Flags().String("old.database", "", "") - upgradeCmd.Flags().String("old.config", "", "") - _ = upgradeCmd.MarkFlagRequired("old.database") -} - -var upgradeCmd = &cobra.Command{ - Use: "upgrade", - Short: "Upgrades an old configuration", - Long: `Upgrades an old configuration. This command DOES NOT -import share links because they are incompatible with -this version.`, - Args: cobra.NoArgs, - Run: func(cmd *cobra.Command, args []string) { - flags := cmd.Flags() - oldDB := mustGetString(flags, "old.database") - oldConf := mustGetString(flags, "old.config") - err := importer.Import(oldDB, oldConf, getParam(flags, "database")) - checkErr(err) - }, -} diff --git a/backend/cmd/users.go b/backend/cmd/users.go index 3c835a18..1f50cf74 100644 --- a/backend/cmd/users.go +++ b/backend/cmd/users.go @@ -79,8 +79,8 @@ func addUserFlags(flags *pflag.FlagSet) { flags.Bool("singleClick", false, "use single clicks only") } -func getViewMode(flags *pflag.FlagSet) users.ViewMode { - viewMode := users.ViewMode(mustGetString(flags, "viewMode")) +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) + "\"")) } diff --git a/backend/cmd/users_add.go b/backend/cmd/users_add.go index f133a464..eac81240 100644 --- a/backend/cmd/users_add.go +++ b/backend/cmd/users_add.go @@ -19,7 +19,7 @@ var usersAddCmd = &cobra.Command{ Run: python(func(cmd *cobra.Command, args []string, d pythonData) { s, err := d.store.Settings.Get() checkErr(err) - getUserDefaults(cmd.Flags(), &s.Defaults, false) + getUserDefaults(cmd.Flags(), &s.UserDefaults, false) password, err := users.HashPwd(args[1]) checkErr(err) @@ -30,7 +30,7 @@ var usersAddCmd = &cobra.Command{ LockPassword: mustGetBool(cmd.Flags(), "lockPassword"), } - s.Defaults.Apply(user) + s.UserDefaults.Apply(user) servSettings, err := d.store.Settings.GetServer() checkErr(err) diff --git a/backend/http/auth.go b/backend/http/auth.go index a47baec5..5ff0f656 100644 --- a/backend/http/auth.go +++ b/backend/http/auth.go @@ -22,7 +22,7 @@ const ( type userInfo struct { ID uint `json:"id"` Locale string `json:"locale"` - ViewMode users.ViewMode `json:"viewMode"` + ViewMode string `json:"viewMode"` SingleClick bool `json:"singleClick"` Perm users.Permissions `json:"perm"` Commands []string `json:"commands"` @@ -145,7 +145,7 @@ var signupHandler = func(w http.ResponseWriter, r *http.Request, d *data) (int, Username: info.Username, } - d.settings.Defaults.Apply(user) + d.settings.UserDefaults.Apply(user) pwd, err := users.HashPwd(info.Password) if err != nil { diff --git a/backend/http/settings.go b/backend/http/settings.go index 49c77326..9591df5d 100644 --- a/backend/http/settings.go +++ b/backend/http/settings.go @@ -24,7 +24,7 @@ var settingsGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, Signup: d.settings.Signup, CreateUserDir: d.settings.CreateUserDir, UserHomeBasePath: d.settings.UserHomeBasePath, - Defaults: d.settings.Defaults, + Defaults: d.settings.UserDefaults, Rules: d.settings.Rules, Frontend: d.settings.Frontend, Shell: d.settings.Shell, @@ -44,7 +44,7 @@ var settingsPutHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d.settings.Signup = req.Signup d.settings.CreateUserDir = req.CreateUserDir d.settings.UserHomeBasePath = req.UserHomeBasePath - d.settings.Defaults = req.Defaults + d.settings.UserDefaults = req.Defaults d.settings.Rules = req.Rules d.settings.Frontend = req.Frontend d.settings.Shell = req.Shell diff --git a/backend/settings/storage.go b/backend/settings/storage.go index a027b4b3..19c8fdcc 100644 --- a/backend/settings/storage.go +++ b/backend/settings/storage.go @@ -50,16 +50,16 @@ func (s *Storage) Save(set *Settings) error { return errors.ErrEmptyKey } - if set.Defaults.Locale == "" { - set.Defaults.Locale = "en" + if set.UserDefaults.Locale == "" { + set.UserDefaults.Locale = "en" } - if set.Defaults.Commands == nil { - set.Defaults.Commands = []string{} + if set.UserDefaults.Commands == nil { + set.UserDefaults.Commands = []string{} } - if set.Defaults.ViewMode == "" { - set.Defaults.ViewMode = users.MosaicViewMode + if set.UserDefaults.ViewMode == "" { + set.UserDefaults.ViewMode = users.MosaicViewMode } if set.Rules == nil { diff --git a/backend/settings/structs.go b/backend/settings/structs.go index fba392e7..7b05b531 100644 --- a/backend/settings/structs.go +++ b/backend/settings/structs.go @@ -1,7 +1,6 @@ package settings import ( - "github.com/gtsteffaniak/filebrowser/files" "github.com/gtsteffaniak/filebrowser/rules" "github.com/gtsteffaniak/filebrowser/users" ) @@ -24,31 +23,28 @@ type Settings struct { Signup bool `json:"signup"` CreateUserDir bool `json:"createUserDir"` UserHomeBasePath string `json:"userHomeBasePath"` - Defaults UserDefaults `json:"defaults"` Commands map[string][]string `json:"commands"` Shell []string `json:"shell"` Rules []rules.Rule `json:"rules"` Server Server `json:"server"` Auth Auth `json:"auth"` - - Frontend Frontend `json:"frontend"` - - UserDefaults UserDefaults `json:"userDefaults"` + Frontend Frontend `json:"frontend"` + UserDefaults UserDefaults `json:"userDefaults"` } type Auth struct { - Recaptcha Recaptcha - Header string `json:"header"` - Method string `json:"method"` - Command string `json:"command"` - Signup bool `json:"signup"` - Shell string `json:"shell"` + Recaptcha Recaptcha `json:"recaptcha"` + Header string `json:"header"` + Method string `json:"method"` + Command string `json:"command"` + Signup bool `json:"signup"` + Shell string `json:"shell"` } type Recaptcha struct { - Host string - Key string - Secret string + Host string `json:"host"` + Key string `json:"key"` + Secret string `json:"secret"` } type Server struct { @@ -68,7 +64,7 @@ type Server struct { Log string `json:"log"` Database string `json:"database"` Root string `json:"root"` - EnablePreviewResize bool `json:"disable-preview-resize"` + EnablePreviewResize bool `json:"enablePreviewResize"` } type Frontend struct { @@ -83,55 +79,25 @@ type Frontend struct { // UserDefaults is a type that holds the default values // for some fields on User. type UserDefaults struct { - Scope string `json:"scope"` - Locale string `json:"locale"` - ViewMode users.ViewMode `json:"viewMode"` - SingleClick bool `json:"singleClick"` - Sorting files.Sorting `json:"sorting"` - Perm users.Permissions `json:"perm"` - Commands []string `json:"commands"` - HideDotfiles bool `json:"hideDotfiles"` - DateFormat bool `json:"dateFormat"` + Scope string `json:"scope"` + Locale string `json:"locale"` + ViewMode string `json:"viewMode"` + SingleClick bool `json:"singleClick"` + Sorting struct { + By string `json:"by"` + Asc bool `json:"asc"` + } `json:"sorting"` + Perm struct { + Admin bool `json:"admin"` + Execute bool `json:"execute"` + Create bool `json:"create"` + Rename bool `json:"rename"` + Modify bool `json:"modify"` + Delete bool `json:"delete"` + Share bool `json:"share"` + Download bool `json:"download"` + } `json:"perm"` + Commands []string `json:"commands"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` } - -//{ -// "server":{ -// "port":8080, -// "baseURL":"", -// "address":"", -// "log":"stdout", -// "database":"./database.db", -// "root":"/srv", -// "disable-thumbnails":false, -// "disable-preview-resize":false, -// "disable-exec":false, -// "disable-type-detection-by-header":false -// }, -// "auth":{ -// "header":"", -// "method":"", -// "command":"", -// "signup":false, -// "shell":"" -// }, -// "branding":{ -// "name":"", -// "color":"", -// "files":"", -// "disableExternal":"", -// "disableUsedPercentage":"" -// }, -// "permissions":{ -// "Admin":false, -// "Execute":true, -// "Create":true, -// "Rename":true, -// "Modify":true, -// "Delete":true, -// "Share":true, -// "Download":true -// }, -// "commands":{}, -// "shell":{}, -// "rules":{} -// } diff --git a/backend/storage/bolt/importer/conf.go b/backend/storage/bolt/importer/conf.go deleted file mode 100644 index a6d84a21..00000000 --- a/backend/storage/bolt/importer/conf.go +++ /dev/null @@ -1,187 +0,0 @@ -package importer - -import ( - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - - "github.com/asdine/storm/v3" - "github.com/pelletier/go-toml/v2" - "gopkg.in/yaml.v2" - - "github.com/gtsteffaniak/filebrowser/auth" - "github.com/gtsteffaniak/filebrowser/settings" - "github.com/gtsteffaniak/filebrowser/storage" - "github.com/gtsteffaniak/filebrowser/users" -) - -type oldDefs struct { - Commands []string `json:"commands" yaml:"commands" toml:"commands"` - Scope string `json:"scope" yaml:"scope" toml:"scope"` - ViewMode string `json:"viewMode" yaml:"viewMode" toml:"viewMode"` - Locale string `json:"locale" yaml:"locale" toml:"locale"` - AllowCommands bool `json:"allowCommands" yaml:"allowCommands" toml:"allowCommands"` - AllowEdit bool `json:"allowEdit" yaml:"allowEdit" toml:"allowEdit"` - AllowNew bool `json:"allowNew" yaml:"allowNew" toml:"allowNew"` -} - -type oldAuth struct { - Method string `json:"method" yaml:"method" toml:"method"` // default none proxy - Header string `json:"header" yaml:"header" toml:"header"` - Command string `json:"command" yaml:"command" toml:"command"` -} - -type oldConf struct { - Port string `json:"port" yaml:"port" toml:"port"` - BaseURL string `json:"baseURL" yaml:"baseURL" toml:"baseURL"` - Log string `json:"log" yaml:"log" toml:"log"` - Address string `json:"address" yaml:"address" toml:"address"` - Defaults oldDefs `json:"defaults" yaml:"defaults" toml:"defaults"` - ReCaptcha struct { - Key string `json:"key" yaml:"key" toml:"key"` - Secret string `json:"secret" yaml:"secret" toml:"secret"` - Host string `json:"host" yaml:"host" toml:"host"` - } `json:"recaptcha" yaml:"recaptcha" toml:"recaptcha"` - Auth oldAuth `json:"auth" yaml:"auth" toml:"auth"` -} - -var defaults = &oldConf{ - Port: "0", - Log: "stdout", - Defaults: oldDefs{ - Commands: []string{"git", "svn", "hg"}, - ViewMode: string(users.MosaicViewMode), - AllowCommands: true, - AllowEdit: true, - AllowNew: true, - Locale: "en", - }, - Auth: oldAuth{ - Method: "default", - }, -} - -func readConf(path string) (*oldConf, error) { - cfg := &oldConf{} - if path != "" { - ext := filepath.Ext(path) - - fd, err := os.Open(path) - if err != nil { - return nil, err - } - defer fd.Close() - - switch ext { - case ".json": - err = json.NewDecoder(fd).Decode(cfg) - case ".toml": - err = toml.NewDecoder(fd).Decode(cfg) - case ".yaml", ".yml": - err = yaml.NewDecoder(fd).Decode(cfg) - default: - return nil, errors.New("unsupported config extension " + ext) - } - - if err != nil { - return nil, err - } - } else { - cfg = defaults - path, err := filepath.Abs(".") - if err != nil { - return nil, err - } - cfg.Defaults.Scope = path - } - return cfg, nil -} - -func importConf(db *storm.DB, path string, sto *storage.Storage) error { - cfg, err := readConf(path) - if err != nil { - return err - } - - commands := map[string][]string{} - err = db.Get("config", "commands", &commands) - if err != nil { - return err - } - - key := []byte{} - err = db.Get("config", "key", &key) - if err != nil { - return err - } - - s := &settings.Settings{ - Key: key, - Signup: false, - Defaults: settings.UserDefaults{ - Scope: cfg.Defaults.Scope, - Commands: cfg.Defaults.Commands, - ViewMode: users.ViewMode(cfg.Defaults.ViewMode), - Locale: cfg.Defaults.Locale, - Perm: users.Permissions{ - Admin: false, - Execute: cfg.Defaults.AllowCommands, - Create: cfg.Defaults.AllowNew, - Rename: cfg.Defaults.AllowEdit, - Modify: cfg.Defaults.AllowEdit, - Delete: cfg.Defaults.AllowEdit, - Share: true, - Download: true, - }, - }, - } - - server := &settings.Server{ - BaseURL: cfg.BaseURL, - Port: 8080, - Address: cfg.Address, - Log: cfg.Log, - } - fmt.Println("config.go", server) - var auther auth.Auther - switch cfg.Auth.Method { - case "proxy": - auther = &auth.ProxyAuth{Header: cfg.Auth.Header} - s.Auth.Method = "proxy" - case "hook": - auther = &auth.HookAuth{Command: cfg.Auth.Command} - s.Auth.Method = "hoook" - case "none": - auther = &auth.NoAuth{} - s.Auth.Method = "noauth" - default: - auther = &auth.JSONAuth{ - ReCaptcha: &auth.ReCaptcha{ - Host: cfg.ReCaptcha.Host, - Key: cfg.ReCaptcha.Key, - Secret: cfg.ReCaptcha.Secret, - }, - } - s.Auth.Method = "password" - } - - err = sto.Auth.Save(auther) - if err != nil { - return err - } - - err = sto.Settings.Save(s) - if err != nil { - return err - } - - err = sto.Settings.SaveServer(server) - if err != nil { - return err - } - - fmt.Println("Configuration successfully imported.") - return nil -} diff --git a/backend/storage/bolt/importer/importer.go b/backend/storage/bolt/importer/importer.go deleted file mode 100644 index 36b60283..00000000 --- a/backend/storage/bolt/importer/importer.go +++ /dev/null @@ -1,41 +0,0 @@ -package importer - -import ( - "github.com/asdine/storm/v3" - "log" - - "github.com/gtsteffaniak/filebrowser/storage/bolt" -) - -// Import imports an old configuration to a newer database. -func Import(oldDBPath, oldConf, newDBPath string) error { - log.Println(oldDBPath, oldConf, newDBPath) - oldDB, err := storm.Open(oldDBPath) - if err != nil { - return err - } - defer oldDB.Close() - - newDB, err := storm.Open(newDBPath) - if err != nil { - return err - } - defer newDB.Close() - - sto, err := bolt.NewStorage(newDB) - if err != nil { - return err - } - - err = importUsers(oldDB, sto) - if err != nil { - return err - } - - err = importConf(oldDB, oldConf, sto) - if err != nil { - return err - } - - return err -} diff --git a/backend/storage/bolt/importer/users.go b/backend/storage/bolt/importer/users.go deleted file mode 100644 index 4606fc2e..00000000 --- a/backend/storage/bolt/importer/users.go +++ /dev/null @@ -1,114 +0,0 @@ -package importer - -import ( - "encoding/json" - "fmt" - - "github.com/asdine/storm/v3" - bolt "go.etcd.io/bbolt" - - "github.com/gtsteffaniak/filebrowser/rules" - "github.com/gtsteffaniak/filebrowser/storage" - "github.com/gtsteffaniak/filebrowser/users" -) - -type oldUser struct { - ID int `storm:"id,increment"` - Admin bool `json:"admin"` - AllowCommands bool `json:"allowCommands"` // Execute commands - AllowEdit bool `json:"allowEdit"` // Edit/rename files - AllowNew bool `json:"allowNew"` // Create files and folders - AllowPublish bool `json:"allowPublish"` // Publish content (to use with static gen) - LockPassword bool `json:"lockPassword"` - Commands []string `json:"commands"` - Locale string `json:"locale"` - Password string `json:"password"` - Rules []*rules.Rule `json:"rules"` - Scope string `json:"filesystem"` - Username string `json:"username" storm:"index,unique"` - ViewMode string `json:"viewMode"` -} - -func readOldUsers(db *storm.DB) ([]*oldUser, error) { - var oldUsers []*oldUser - err := db.Bolt.View(func(tx *bolt.Tx) error { - return tx.Bucket([]byte("User")).ForEach(func(k []byte, v []byte) error { - if len(v) > 0 && string(v)[0] == '{' { - user := &oldUser{} - err := json.Unmarshal(v, user) - - if err != nil { - return err - } - - oldUsers = append(oldUsers, user) - } - - return nil - }) - }) - - return oldUsers, err -} - -func convertUsersToNew(old []*oldUser) ([]*users.User, error) { - list := []*users.User{} - - for _, oldUser := range old { - user := &users.User{ - Username: oldUser.Username, - Password: oldUser.Password, - Scope: oldUser.Scope, - Locale: oldUser.Locale, - LockPassword: oldUser.LockPassword, - ViewMode: users.ViewMode(oldUser.ViewMode), - Commands: oldUser.Commands, - Rules: []rules.Rule{}, - Perm: users.Permissions{ - Admin: oldUser.Admin, - Execute: oldUser.AllowCommands, - Create: oldUser.AllowNew, - Rename: oldUser.AllowEdit, - Modify: oldUser.AllowEdit, - Delete: oldUser.AllowEdit, - Share: true, - Download: true, - }, - } - - for _, rule := range oldUser.Rules { - user.Rules = append(user.Rules, *rule) - } - - err := user.Clean("") - if err != nil { - return nil, err - } - - list = append(list, user) - } - - return list, nil -} - -func importUsers(old *storm.DB, sto *storage.Storage) error { - oldUsers, err := readOldUsers(old) - if err != nil { - return err - } - - newUsers, err := convertUsersToNew(oldUsers) - if err != nil { - return err - } - - for _, user := range newUsers { - err = sto.Users.Save(user) - if err != nil { - return err - } - } - - fmt.Printf("%d users successfully imported into the new DB.\n", len(newUsers)) - return nil -} diff --git a/backend/users/users.go b/backend/users/users.go index 91dcea68..cfdcb2fa 100644 --- a/backend/users/users.go +++ b/backend/users/users.go @@ -11,12 +11,9 @@ import ( "github.com/gtsteffaniak/filebrowser/rules" ) -// ViewMode describes a view mode. -type ViewMode string - -const ( - ListViewMode ViewMode = "list" - MosaicViewMode ViewMode = "mosaic" +var ( + ListViewMode = "list" + MosaicViewMode = "mosaic" ) // User describes a user. @@ -27,7 +24,7 @@ type User struct { Scope string `json:"scope"` Locale string `json:"locale"` LockPassword bool `json:"lockPassword"` - ViewMode ViewMode `json:"viewMode"` + ViewMode string `json:"viewMode"` SingleClick bool `json:"singleClick"` Perm Permissions `json:"perm"` Commands []string `json:"commands"`