diff --git a/grafana b/grafana index d9a33680a68..9667f324f1d 160000 --- a/grafana +++ b/grafana @@ -1 +1 @@ -Subproject commit d9a33680a686ac6bc1239797278ad03b3c784d1c +Subproject commit 9667f324f1db66f7cdfa7ce5b6c9b38c92f41d53 diff --git a/pkg/api/account.go b/pkg/api/account.go new file mode 100644 index 00000000000..6d665fbbdbb --- /dev/null +++ b/pkg/api/account.go @@ -0,0 +1,18 @@ +package api + +import ( + "github.com/torkelo/grafana-pro/pkg/bus" + "github.com/torkelo/grafana-pro/pkg/middleware" + m "github.com/torkelo/grafana-pro/pkg/models" +) + +func CreateAccount(c *middleware.Context, cmd m.CreateAccountCommand) { + cmd.UserId = c.UserId + + if err := bus.Dispatch(&cmd); err != nil { + c.JsonApiErr(500, "Failed to create account", nil) + return + } + + c.JsonOK("Account created") +} diff --git a/pkg/api/api.go b/pkg/api/api.go index c692ddd52ec..5073d7644a7 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -49,6 +49,7 @@ func Register(r *macaron.Macaron) { // account r.Group("/account", func() { + r.Put("/", bind(m.CreateAccountCommand{}), CreateAccount) r.Put("/users", bind(m.AddAccountUserCommand{}), AddAccountUser) r.Get("/users", GetAccountUsers) r.Delete("/users/:id", RemoveAccountUser) diff --git a/pkg/models/account.go b/pkg/models/account.go index 5f3d61d1c19..2d8a9e2bb6c 100644 --- a/pkg/models/account.go +++ b/pkg/models/account.go @@ -21,8 +21,10 @@ type Account struct { // COMMANDS type CreateAccountCommand struct { - Name string `json:"name"` + Name string `json:"name" binding:"Required"` + // initial admin user for account + UserId int64 `json:"-"` Result Account `json:"-"` } diff --git a/pkg/services/sqlstore/account.go b/pkg/services/sqlstore/account.go index 201cdb15c6c..c78859a7132 100644 --- a/pkg/services/sqlstore/account.go +++ b/pkg/services/sqlstore/account.go @@ -24,8 +24,22 @@ func CreateAccount(cmd *m.CreateAccountCommand) error { Updated: time.Now(), } - _, err := sess.Insert(&account) + if _, err := sess.Insert(&account); err != nil { + return err + } + + // create inital admin account user + user := m.AccountUser{ + AccountId: account.Id, + UserId: cmd.UserId, + Role: m.ROLE_ADMIN, + Created: time.Now(), + Updated: time.Now(), + } + + _, err := sess.Insert(&user) cmd.Result = account + return err }) }