From 652e3086d5ae34b3a1455eb93e439568e8c83c73 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sun, 1 Nov 2020 12:07:55 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20command=20to=20update=20the?= =?UTF-8?q?=20password?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd_user.go | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/cmd_user.go b/cmd_user.go index cb74ead..7dc3f1a 100644 --- a/cmd_user.go +++ b/cmd_user.go @@ -27,15 +27,14 @@ package main import ( "fmt" "os" - - "golang.org/x/crypto/bcrypt" ) type CmdUser struct { - CmdList CmdUserList `cmd:"" name:"list" help:"List all users."` - CmdAdd CmdUserAdd `cmd:"" name:"add" help:"Add a user."` - CmdUpdate CmdUserUpdate `cmd:"" name:"update" help:"Update a user."` - CmdDelete CmdUserDelete `cmd:"" name:"delete" help:"Delete a user."` + CmdList CmdUserList `cmd:"" name:"list" help:"List all users."` + CmdAdd CmdUserAdd `cmd:"" name:"add" help:"Add a user."` + CmdUpdate CmdUserUpdate `cmd:"" name:"update" help:"Update a user."` + CmdPassword CmdUserPassword `cmd:"" name:"password" help:"Change the password of a user."` + CmdDelete CmdUserDelete `cmd:"" name:"delete" help:"Delete a user."` } type CmdUserList struct{} @@ -82,7 +81,6 @@ func (cmd CmdUserAdd) Run(app *app) error { type CmdUserUpdate struct { Username string `arg:"" name:"username" help:"The username of the user to be updated."` - Password string `name:"password" help:"Update the password, if set."` Role GlobalRole `name:"role" default:"user" help:"Update the role, if set. 'admin' or ' user'"` } @@ -106,15 +104,6 @@ func (cmd CmdUserUpdate) Run(app *app) error { changed = true } - if cmd.Password != "" { - hash, err := bcrypt.GenerateFromPassword([]byte(cmd.Password), 0) - if err != nil { - return fmt.Errorf("cannot hash password: %w", err) - } - user.Password = string(hash) - changed = true - } - if !changed { // Nothing changed. Nothing to write. Not different from a successful write to the user. return nil @@ -123,6 +112,28 @@ func (cmd CmdUserUpdate) Run(app *app) error { return app.userStore.UpdateUser(user) } +type CmdUserPassword struct { + Username string `arg:"" name:"username" help:"The username of the user to be updated."` + PasswordParam +} + +func (cmd CmdUserPassword) Run(app *app) error { + user, err := app.userStore.GetUser(cmd.Username) + if err != nil { + return err + } + + password, err := cmd.acquirePassword() + if err != nil { + return fmt.Errorf("cannot acquire password for user: %w", err) + } + + return app.userStore.UpdateUser(User{ + Username: user.Username, + Password: password, + }) +} + type CmdUserDelete struct { Username string `arg:"" name:"username" help:"The username of the user to be deleted."` }