From 9feb8a73fdb42556fc0300c0c6a920fd757af760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Fri, 16 Jan 2015 12:06:24 +0100 Subject: [PATCH] Added binding to tokens api and role validation --- grafana | 2 +- pkg/api/api.go | 5 ++++- pkg/api/collaborators.go | 4 ++++ pkg/api/token.go | 23 ++++++++--------------- pkg/models/collaborator.go | 8 ++------ pkg/models/token.go | 11 ++++++----- 6 files changed, 25 insertions(+), 28 deletions(-) diff --git a/grafana b/grafana index 500e0006613..d3cc6e518df 160000 --- a/grafana +++ b/grafana @@ -1 +1 @@ -Subproject commit 500e00066139b861a2898db6ef80ef87b8b8daa6 +Subproject commit d3cc6e518dfd2ceb26c0e568bc603b4473b11a02 diff --git a/pkg/api/api.go b/pkg/api/api.go index bbccf34ff81..f2e3cd7cea2 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -46,7 +46,10 @@ func Register(r *macaron.Macaron) { }) // Token r.Group("/tokens", func() { - r.Combo("/").Get(GetTokens).Put(AddToken).Post(UpdateToken) + r.Combo("/"). + Get(GetTokens). + Put(bind(m.AddTokenCommand{}), AddToken). + Post(bind(m.UpdateTokenCommand{}), UpdateToken) r.Delete("/:id", DeleteToken) }) // Data sources diff --git a/pkg/api/collaborators.go b/pkg/api/collaborators.go index 3fd8e1dc77a..de43e0ab6bc 100644 --- a/pkg/api/collaborators.go +++ b/pkg/api/collaborators.go @@ -7,6 +7,10 @@ import ( ) func AddCollaborator(c *middleware.Context, cmd m.AddCollaboratorCommand) { + if !cmd.Role.IsValid() { + c.JsonApiErr(400, "Invalid role specified", nil) + return + } userQuery := m.GetAccountByLoginQuery{LoginOrEmail: cmd.LoginOrEmail} err := bus.Dispatch(&userQuery) diff --git a/pkg/api/token.go b/pkg/api/token.go index a09eb41d700..2cd6f98e051 100644 --- a/pkg/api/token.go +++ b/pkg/api/token.go @@ -41,19 +41,12 @@ func DeleteToken(c *middleware.Context) { c.JsonOK("Token deleted") } -func AddToken(c *middleware.Context) { - cmd := m.AddTokenCommand{} - - if !c.JsonBody(&cmd) { - c.JsonApiErr(400, "Validation failed", nil) +func AddToken(c *middleware.Context, cmd m.AddTokenCommand) { + if !cmd.Role.IsValid() { + c.JsonApiErr(400, "Invalid role specified", nil) return } - // if cmd.Role != m.ROLE_READ_WRITE && cmd.Role != m.ROLE_READ { - // c.JsonApiErr(400, "Invalid role specified", nil) - // return - // } - cmd.AccountId = c.Account.Id cmd.Token = util.GetRandomString(64) @@ -61,20 +54,20 @@ func AddToken(c *middleware.Context) { c.JsonApiErr(500, "Failed to add token", err) return } + result := &m.TokenDTO{ Id: cmd.Result.Id, Name: cmd.Result.Name, Role: cmd.Result.Role, Token: cmd.Result.Token, } + c.JSON(200, result) } -func UpdateToken(c *middleware.Context) { - cmd := m.UpdateTokenCommand{} - - if !c.JsonBody(&cmd) { - c.JsonApiErr(400, "Validation failed", nil) +func UpdateToken(c *middleware.Context, cmd m.UpdateTokenCommand) { + if !cmd.Role.IsValid() { + c.JsonApiErr(400, "Invalid role specified", nil) return } diff --git a/pkg/models/collaborator.go b/pkg/models/collaborator.go index f536b5adc22..371e07371e2 100644 --- a/pkg/models/collaborator.go +++ b/pkg/models/collaborator.go @@ -19,12 +19,8 @@ const ( ROLE_ADMIN RoleType = "Admin" ) -func (r RoleType) Validate() error { - if r == ROLE_OWNER || r == ROLE_VIEWER || r == ROLE_ADMIN || r == ROLE_EDITOR { - return nil - } - - return ErrInvalidRoleType +func (r RoleType) IsValid() bool { + return r == ROLE_VIEWER || r == ROLE_ADMIN || r == ROLE_EDITOR } type Collaborator struct { diff --git a/pkg/models/token.go b/pkg/models/token.go index 0ba1114026d..02be6a90dd8 100644 --- a/pkg/models/token.go +++ b/pkg/models/token.go @@ -25,11 +25,12 @@ type AddTokenCommand struct { } type UpdateTokenCommand struct { - Id int64 `json:"id"` - Name string `json:"name"` - AccountId int64 `json:"-"` - Role RoleType `json:"role"` - Result *Token `json:"-"` + Id int64 `json:"id"` + Name string `json:"name"` + Role RoleType `json:"role"` + + AccountId int64 `json:"-"` + Result *Token `json:"-"` } type DeleteTokenCommand struct {