diff --git a/pkg/cmd/grafana-cli/commands/commands.go b/pkg/cmd/grafana-cli/commands/commands.go index 2099a576647..b03e77e6cbf 100644 --- a/pkg/cmd/grafana-cli/commands/commands.go +++ b/pkg/cmd/grafana-cli/commands/commands.go @@ -1,14 +1,45 @@ package commands import ( + "flag" "os" "github.com/codegangsta/cli" "github.com/fatih/color" "github.com/grafana/grafana/pkg/cmd/grafana-cli/logger" + "github.com/grafana/grafana/pkg/services/sqlstore" + "github.com/grafana/grafana/pkg/setting" ) -func runCommand(command func(commandLine CommandLine) error) func(context *cli.Context) { +var configFile = flag.String("config", "", "path to config file") +var homePath = flag.String("homepath", "", "path to grafana install/home path, defaults to working directory") + +func runDbCommand(command func(commandLine CommandLine) error) func(context *cli.Context) { + return func(context *cli.Context) { + + flag.Parse() + setting.NewConfigContext(&setting.CommandLineArgs{ + Config: *configFile, + HomePath: *homePath, + Args: flag.Args(), + }) + + sqlstore.NewEngine() + + cmd := &contextCommandLine{context} + if err := command(cmd); err != nil { + logger.Errorf("\n%s: ", color.RedString("Error")) + logger.Errorf("%s\n\n", err) + + cmd.ShowHelp() + os.Exit(1) + } else { + logger.Info("\n\n") + } + } +} + +func runPluginCommand(command func(commandLine CommandLine) error) func(context *cli.Context) { return func(context *cli.Context) { cmd := &contextCommandLine{context} @@ -28,34 +59,42 @@ var pluginCommands = []cli.Command{ { Name: "install", Usage: "install ", - Action: runCommand(installCommand), + Action: runPluginCommand(installCommand), }, { Name: "list-remote", Usage: "list remote available plugins", - Action: runCommand(listremoteCommand), + Action: runPluginCommand(listremoteCommand), }, { Name: "list-versions", Usage: "list-versions ", - Action: runCommand(listversionsCommand), + Action: runPluginCommand(listversionsCommand), }, { Name: "update", Usage: "update ", Aliases: []string{"upgrade"}, - Action: runCommand(upgradeCommand), + Action: runPluginCommand(upgradeCommand), }, { Name: "update-all", Aliases: []string{"upgrade-all"}, Usage: "update all your installed plugins", - Action: runCommand(upgradeAllCommand), + Action: runPluginCommand(upgradeAllCommand), }, { Name: "ls", Usage: "list all installed plugins", - Action: runCommand(lsCommand), + Action: runPluginCommand(lsCommand), }, { Name: "uninstall", Aliases: []string{"remove"}, Usage: "uninstall ", - Action: runCommand(removeCommand), + Action: runPluginCommand(removeCommand), + }, +} + +var userCommands = []cli.Command{ + { + Name: "reset-admin", + Usage: "reset-admin ", + Action: runDbCommand(resetPasswordCommand), }, } @@ -65,4 +104,9 @@ var Commands = []cli.Command{ Usage: "Manage plugins for grafana", Subcommands: pluginCommands, }, + { + Name: "user", + Usage: "", + Subcommands: userCommands, + }, } diff --git a/pkg/cmd/grafana-cli/commands/reset_password_command.go b/pkg/cmd/grafana-cli/commands/reset_password_command.go new file mode 100644 index 00000000000..dac43aa7aba --- /dev/null +++ b/pkg/cmd/grafana-cli/commands/reset_password_command.go @@ -0,0 +1,40 @@ +package commands + +import ( + "fmt" + + "github.com/fatih/color" + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/cmd/grafana-cli/logger" + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/util" +) + +func resetPasswordCommand(c CommandLine) error { + newPassword := c.Args().First() + + if len(newPassword) < 4 { + return fmt.Errorf("New password too short") + } + + userQuery := models.GetUserByIdQuery{Id: 1} + + if err := bus.Dispatch(&userQuery); err != nil { + return fmt.Errorf("Could not read user from database. Error: %v", err) + } + + passwordHashed := util.EncodePassword(newPassword, userQuery.Result.Salt) + + cmd := models.ChangeUserPasswordCommand{ + UserId: 1, + NewPassword: passwordHashed, + } + + if err := bus.Dispatch(&cmd); err != nil { + return fmt.Errorf("Failed to update user password") + } + + logger.Infof("Admin password changed successfully %s", color.GreenString("✔")) + + return nil +}