소스 검색

feat(cli): add db command to cli.

bergquist 9 년 전
부모
커밋
c087445d51
2개의 변경된 파일92개의 추가작업 그리고 8개의 파일을 삭제
  1. 52 8
      pkg/cmd/grafana-cli/commands/commands.go
  2. 40 0
      pkg/cmd/grafana-cli/commands/reset_password_command.go

+ 52 - 8
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 <plugin id> <plugin version (optional)>",
-		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 <plugin id>",
-		Action: runCommand(listversionsCommand),
+		Action: runPluginCommand(listversionsCommand),
 	}, {
 		Name:    "update",
 		Usage:   "update <plugin id>",
 		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 <plugin id>",
-		Action:  runCommand(removeCommand),
+		Action:  runPluginCommand(removeCommand),
+	},
+}
+
+var userCommands = []cli.Command{
+	{
+		Name:   "reset-admin",
+		Usage:  "reset-admin <new password>",
+		Action: runDbCommand(resetPasswordCommand),
 	},
 }
 
@@ -65,4 +104,9 @@ var Commands = []cli.Command{
 		Usage:       "Manage plugins for grafana",
 		Subcommands: pluginCommands,
 	},
+	{
+		Name:        "user",
+		Usage:       "",
+		Subcommands: userCommands,
+	},
 }

+ 40 - 0
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
+}