updated
This commit is contained in:
		
							parent
							
								
									db80387cf6
								
							
						
					
					
						commit
						43bf5b6f51
					
				| 
						 | 
				
			
			@ -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),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +0,0 @@
 | 
			
		|||
package cmd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Execute executes the commands.
 | 
			
		||||
func Execute() {
 | 
			
		||||
	if err := rootCmd.Execute(); err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,27 +0,0 @@
 | 
			
		|||
package cmd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	cmdsCmd.AddCommand(cmdsAddCmd)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var cmdsAddCmd = &cobra.Command{
 | 
			
		||||
	Use:   "add <event> <command>",
 | 
			
		||||
	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{}),
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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{}),
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,56 +0,0 @@
 | 
			
		|||
package cmd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	cmdsCmd.AddCommand(cmdsRmCmd)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var cmdsRmCmd = &cobra.Command{
 | 
			
		||||
	Use:   "rm <event> <index> [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{}),
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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, "", "  ")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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) + "\""))
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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":{}
 | 
			
		||||
// }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue