diff --git a/pkg/cmd/grafana-cli/commands/commands.go b/pkg/cmd/grafana-cli/commands/commands.go index 269a0c917fb..61c8dd38d05 100644 --- a/pkg/cmd/grafana-cli/commands/commands.go +++ b/pkg/cmd/grafana-cli/commands/commands.go @@ -111,6 +111,13 @@ var adminCommands = []*cli.Command{ Name: "reset-admin-password", Usage: "reset-admin-password ", Action: runDbCommand(resetPasswordCommand), + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "password-from-stdin", + Usage: "Read the password from stdin", + Value: false, + }, + }, }, { Name: "data-migration", diff --git a/pkg/cmd/grafana-cli/commands/reset_password_command.go b/pkg/cmd/grafana-cli/commands/reset_password_command.go index 8b99f85814d..1faa6ba9088 100644 --- a/pkg/cmd/grafana-cli/commands/reset_password_command.go +++ b/pkg/cmd/grafana-cli/commands/reset_password_command.go @@ -1,7 +1,9 @@ package commands import ( + "bufio" "fmt" + "os" "github.com/fatih/color" "github.com/grafana/grafana/pkg/bus" @@ -16,7 +18,22 @@ import ( const AdminUserId = 1 func resetPasswordCommand(c utils.CommandLine, sqlStore *sqlstore.SqlStore) error { - newPassword := c.Args().First() + newPassword := "" + + if c.Bool("password-from-stdin") { + logger.Infof("New Password: ") + + scanner := bufio.NewScanner(os.Stdin) + if ok := scanner.Scan(); !ok { + if err := scanner.Err(); err != nil { + return fmt.Errorf("can't read password from stdin: %w", err) + } + return fmt.Errorf("can't read password from stdin") + } + newPassword = scanner.Text() + } else { + newPassword = c.Args().First() + } password := models.Password(newPassword) if password.IsWeak() {