package cmd import ( "github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/users" "github.com/spf13/cobra" ) func init() { usersCmd.AddCommand(usersUpdateCmd) usersUpdateCmd.Flags().UintP("id", "i", 0, "id of the user") usersUpdateCmd.Flags().StringP("username", "u", "", "user to change or new username if flag 'id' is set") usersUpdateCmd.Flags().StringP("password", "p", "", "new password") addUserFlags(usersUpdateCmd) } var usersUpdateCmd = &cobra.Command{ Use: "update", Short: "Updates an existing user", Long: `Updates an existing user. Set the flags for the options you want to change.`, Args: usernameOrIDRequired, Run: func(cmd *cobra.Command, args []string) { db := getDB() defer db.Close() st := getStorage(db) set, err := st.Settings.Get() checkErr(err) id, _ := cmd.Flags().GetUint("id") username := mustGetString(cmd, "username") password := mustGetString(cmd, "password") var user *users.User if id != 0 { user, err = st.Users.Get(set.Scope, id) } else { user, err = st.Users.Get(set.Scope, username) } checkErr(err) defaults := settings.UserDefaults{ Scope: user.Scope, Locale: user.Locale, ViewMode: user.ViewMode, Perm: user.Perm, Sorting: user.Sorting, Commands: user.Commands, } getUserDefaults(cmd, &defaults, false) user.Scope = defaults.Scope user.Locale = defaults.Locale user.ViewMode = defaults.ViewMode user.Perm = defaults.Perm user.Commands = defaults.Commands user.Sorting = defaults.Sorting user.LockPassword = mustGetBool(cmd, "lockPassword") if user.Username != username && username != "" { user.Username = username } if password != "" { user.Password, err = users.HashPwd(password) checkErr(err) } err = st.Users.Update(user) checkErr(err) printUsers([]*users.User{user}) }, }