accounts.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package cmd
  2. import (
  3. "fmt"
  4. "github.com/codegangsta/cli"
  5. "github.com/grafana/grafana/pkg/bus"
  6. "github.com/grafana/grafana/pkg/log"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/services/sqlstore"
  9. "github.com/grafana/grafana/pkg/setting"
  10. "os"
  11. "text/tabwriter"
  12. )
  13. var ListAccounts = cli.Command{
  14. Name: "account",
  15. Usage: "list accounts",
  16. Description: "Lists the accounts in the system",
  17. Action: listAccounts,
  18. Flags: []cli.Flag{
  19. cli.StringFlag{
  20. Name: "config",
  21. Value: "grafana.ini",
  22. Usage: "path to config file",
  23. },
  24. },
  25. }
  26. var CreateAccount = cli.Command{
  27. Name: "account:create",
  28. Usage: "create a new account",
  29. Description: "Creates a new account",
  30. Action: createAccount,
  31. Flags: []cli.Flag{
  32. cli.StringFlag{
  33. Name: "config",
  34. Value: "grafana.ini",
  35. Usage: "path to config file",
  36. },
  37. },
  38. }
  39. var DeleteAccount = cli.Command{
  40. Name: "account:delete",
  41. Usage: "delete an existing account",
  42. Description: "Deletes an existing account",
  43. Action: deleteAccount,
  44. Flags: []cli.Flag{
  45. cli.StringFlag{
  46. Name: "config",
  47. Value: "grafana.ini",
  48. Usage: "path to config file",
  49. },
  50. },
  51. }
  52. func listAccounts(c *cli.Context) {
  53. setting.NewConfigContext()
  54. sqlstore.NewEngine()
  55. sqlstore.EnsureAdminUser()
  56. accountsQuery := m.GetAccountsQuery{}
  57. if err := bus.Dispatch(&accountsQuery); err != nil {
  58. log.ConsoleFatalf("Failed to find accounts: %s", err)
  59. }
  60. w := tabwriter.NewWriter(os.Stdout, 20, 1, 4, ' ', 0)
  61. fmt.Fprintf(w, "ID\tNAME\n")
  62. for _, account := range accountsQuery.Result {
  63. fmt.Fprintf(w, "%d\t%s\n", account.Id, account.Name)
  64. }
  65. w.Flush()
  66. }
  67. func createAccount(c *cli.Context) {
  68. setting.NewConfigContext()
  69. sqlstore.NewEngine()
  70. sqlstore.EnsureAdminUser()
  71. if !c.Args().Present() {
  72. log.ConsoleFatal("Account name arg is required")
  73. }
  74. name := c.Args().First()
  75. adminQuery := m.GetUserByLoginQuery{LoginOrEmail: setting.AdminUser}
  76. if err := bus.Dispatch(&adminQuery); err == m.ErrUserNotFound {
  77. log.ConsoleFatalf("Failed to find default admin user: %s", err)
  78. }
  79. adminUser := adminQuery.Result
  80. cmd := m.CreateAccountCommand{Name: name, UserId: adminUser.Id}
  81. if err := bus.Dispatch(&cmd); err != nil {
  82. log.ConsoleFatalf("Failed to create account: %s", err)
  83. }
  84. log.ConsoleInfof("Account %s created for admin user %s\n", name, adminUser.Email)
  85. }
  86. func deleteAccount(c *cli.Context) {
  87. setting.NewConfigContext()
  88. sqlstore.NewEngine()
  89. sqlstore.EnsureAdminUser()
  90. if !c.Args().Present() {
  91. log.ConsoleFatal("Account name arg is required")
  92. }
  93. name := c.Args().First()
  94. accountQuery := m.GetAccountByNameQuery{Name: name}
  95. if err := bus.Dispatch(&accountQuery); err != nil {
  96. log.ConsoleFatalf("Failed to find account: %s", err)
  97. }
  98. accountId := accountQuery.Result.Id
  99. cmd := m.DeleteAccountCommand{Id: accountId}
  100. if err := bus.Dispatch(&cmd); err != nil {
  101. log.ConsoleFatalf("Failed to delete account: %s", err)
  102. }
  103. log.ConsoleInfof("Account %s deleted", name)
  104. }