From ac12619d20050fd03fdb545d29e4ae85793abf6f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 7 Jan 2019 22:30:33 +0000 Subject: [PATCH] feat: start users import License: MIT Signed-off-by: Henrique Dias --- cmd/users_import.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 cmd/users_import.go diff --git a/cmd/users_import.go b/cmd/users_import.go new file mode 100644 index 00000000..6b08952a --- /dev/null +++ b/cmd/users_import.go @@ -0,0 +1,45 @@ +package cmd + +import ( + "encoding/json" + "errors" + "os" + "strconv" + + "github.com/filebrowser/filebrowser/v2/users" + "github.com/spf13/cobra" +) + +func init() { + usersCmd.AddCommand(usersImportCmd) + usersImportCmd.Flags().Bool("overwrite", false, "overwrite existing users,") +} + +var usersImportCmd = &cobra.Command{ + Use: "import ", + Short: "Import users from a file.", + Args: cobra.ExactArgs(1), + Run: python(func(cmd *cobra.Command, args []string, d pythonData) { + fd, err := os.Open(args[0]) + checkErr(err) + defer fd.Close() + + list := []users.User{} + err = json.NewDecoder(fd).Decode(&list) + checkErr(err) + + overwrite := mustGetBool(cmd, "overwrite") + + for _, user := range list { + // TODO: check for ID/Username conflicts too. + _, err := d.store.Users.Get("", user.ID) + if err == nil && !overwrite { + checkErr(errors.New("user " + strconv.Itoa(int(user.ID)) + " is already registred")) + } + + err = d.store.Users.Save(&user) + checkErr(err) + } + + }, pythonConfig{}), +}