diff --git a/grafana b/grafana index ad91093902b..dede578c7d5 160000 --- a/grafana +++ b/grafana @@ -1 +1 @@ -Subproject commit ad91093902bdfc0d2a87bb362a76a9057aef4361 +Subproject commit dede578c7d569f87c35724f74a72216743bf9508 diff --git a/pkg/api/api_account.go b/pkg/api/api_account.go index 444c07cb593..1972781ed52 100644 --- a/pkg/api/api_account.go +++ b/pkg/api/api_account.go @@ -27,12 +27,15 @@ func AddCollaborator(c *middleware.Context) { return } - accountToAdd, err := m.GetAccountByLogin(cmd.Email) + userQuery := m.GetAccountByLoginQuery{Login: cmd.Email} + err := bus.Dispatch(&userQuery) if err != nil { c.JsonApiErr(404, "Collaborator not found", nil) return } + accountToAdd := userQuery.Result + if accountToAdd.Id == c.UserAccount.Id { c.JsonApiErr(400, "Cannot add yourself as collaborator", nil) return diff --git a/pkg/api/api_login.go b/pkg/api/api_login.go index 93e23fec44a..d1dcba14484 100644 --- a/pkg/api/api_login.go +++ b/pkg/api/api_login.go @@ -2,9 +2,10 @@ package api import ( "github.com/torkelo/grafana-pro/pkg/api/dtos" + "github.com/torkelo/grafana-pro/pkg/bus" "github.com/torkelo/grafana-pro/pkg/log" "github.com/torkelo/grafana-pro/pkg/middleware" - "github.com/torkelo/grafana-pro/pkg/models" + m "github.com/torkelo/grafana-pro/pkg/models" "github.com/torkelo/grafana-pro/pkg/utils" ) @@ -22,14 +23,18 @@ func LoginPost(c *middleware.Context) { return } - account, err := models.GetAccountByLogin(loginModel.Email) + userQuery := m.GetAccountByLoginQuery{Login: loginModel.Email} + err := bus.Dispatch(&userQuery) + if err != nil { - c.JSON(401, utils.DynMap{"status": "unauthorized"}) + c.JsonApiErr(401, "Invalid username or password", err) return } + account := userQuery.Result + if loginModel.Password != account.Password { - c.JSON(401, utils.DynMap{"status": "unauthorized"}) + c.JsonApiErr(401, "Invalid username or password", err) return } @@ -42,7 +47,7 @@ func LoginPost(c *middleware.Context) { c.JSON(200, resp) } -func loginUserWithAccount(account *models.Account, c *middleware.Context) { +func loginUserWithAccount(account *m.Account, c *middleware.Context) { if account == nil { log.Error(3, "Account login with nil account") } diff --git a/pkg/api/api_login_oauth.go b/pkg/api/api_login_oauth.go index 5a902a81572..e12ff127326 100644 --- a/pkg/api/api_login_oauth.go +++ b/pkg/api/api_login_oauth.go @@ -49,7 +49,8 @@ func OAuthLogin(ctx *middleware.Context) { log.Info("login.OAuthLogin(social login): %s", userInfo) - account, err := m.GetAccountByLogin(userInfo.Email) + userQuery := m.GetAccountByLoginQuery{Login: userInfo.Email} + err = bus.Dispatch(&userQuery) // create account if missing if err == m.ErrAccountNotFound { @@ -65,13 +66,13 @@ func OAuthLogin(ctx *middleware.Context) { return } - account = &cmd.Result + userQuery.Result = &cmd.Result } else if err != nil { ctx.Handle(500, "Unexpected error", err) } // login - loginUserWithAccount(account, ctx) + loginUserWithAccount(userQuery.Result, ctx) ctx.Redirect("/") } diff --git a/pkg/middleware/auth.go b/pkg/middleware/auth.go index 7aa02b3dc04..b1ce5b50a91 100644 --- a/pkg/middleware/auth.go +++ b/pkg/middleware/auth.go @@ -7,7 +7,8 @@ import ( "github.com/Unknwon/macaron" "github.com/macaron-contrib/session" - "github.com/torkelo/grafana-pro/pkg/models" + "github.com/torkelo/grafana-pro/pkg/bus" + m "github.com/torkelo/grafana-pro/pkg/models" ) func authGetRequestAccountId(c *Context, sess session.Store) (int64, error) { @@ -40,19 +41,21 @@ func Auth() macaron.Handler { return } - account, err := models.GetAccount(accountId) + userQuery := m.GetAccountByIdQuery{Id: accountId} + err = bus.Dispatch(&userQuery) if err != nil { authDenied(c) return } - usingAccount, err := models.GetAccount(account.UsingAccountId) + usingQuery := m.GetAccountByIdQuery{Id: userQuery.Result.UsingAccountId} + err = bus.Dispatch(&usingQuery) if err != nil { authDenied(c) return } - c.UserAccount = account - c.Account = usingAccount + c.UserAccount = userQuery.Result + c.Account = usingQuery.Result } } diff --git a/pkg/models/account.go b/pkg/models/account.go index c48406fb474..c7ba4d4e8c7 100644 --- a/pkg/models/account.go +++ b/pkg/models/account.go @@ -5,11 +5,6 @@ import ( "time" ) -var ( - GetAccountByLogin func(emailOrName string) (*Account, error) - GetAccount func(accountId int64) (*Account, error) -) - // Typed errors var ( ErrAccountNotFound = errors.New("Account not found") @@ -80,3 +75,13 @@ type GetOtherAccountsQuery struct { AccountId int64 Result []*OtherAccountDTO } + +type GetAccountByIdQuery struct { + Id int64 + Result *Account +} + +type GetAccountByLoginQuery struct { + Login string + Result *Account +} diff --git a/pkg/stores/sqlstore/accounts.go b/pkg/stores/sqlstore/accounts.go index 5331528162a..51790e27ee0 100644 --- a/pkg/stores/sqlstore/accounts.go +++ b/pkg/stores/sqlstore/accounts.go @@ -15,6 +15,8 @@ func init() { bus.AddHandler("sql", GetOtherAccounts) bus.AddHandler("sql", CreateAccount) bus.AddHandler("sql", SetUsingAccount) + bus.AddHandler("sql", GetAccountById) + bus.AddHandler("sql", GetAccountByLogin) } func CreateAccount(cmd *m.CreateAccountCommand) error { @@ -85,38 +87,46 @@ func AddCollaborator(cmd *m.AddCollaboratorCommand) error { }) } -func GetAccount(id int64) (*m.Account, error) { +func GetAccountById(query *m.GetAccountByIdQuery) error { var err error var account m.Account - has, err := x.Id(id).Get(&account) + has, err := x.Id(query.Id).Get(&account) if err != nil { - return nil, err + return err } else if has == false { - return nil, m.ErrAccountNotFound + return m.ErrAccountNotFound } if account.UsingAccountId == 0 { account.UsingAccountId = account.Id } - return &account, nil + query.Result = &account + + return nil } -func GetAccountByLogin(emailOrLogin string) (*m.Account, error) { +func GetAccountByLogin(query *m.GetAccountByLoginQuery) error { var err error - account := &m.Account{Login: emailOrLogin} - has, err := x.Get(account) + account := m.Account{Login: query.Login} + has, err := x.Get(&account) if err != nil { - return nil, err + return err } else if has == false { - return nil, m.ErrAccountNotFound + return m.ErrAccountNotFound } - return account, nil + if account.UsingAccountId == 0 { + account.UsingAccountId = account.Id + } + + query.Result = &account + + return nil } func GetOtherAccounts(query *m.GetOtherAccountsQuery) error { diff --git a/pkg/stores/sqlstore/sqlstore.go b/pkg/stores/sqlstore/sqlstore.go index 5c92549f75f..ff868955ae4 100644 --- a/pkg/stores/sqlstore/sqlstore.go +++ b/pkg/stores/sqlstore/sqlstore.go @@ -35,8 +35,6 @@ func init() { } func Init() { - m.GetAccount = GetAccount - m.GetAccountByLogin = GetAccountByLogin m.GetDashboard = GetDashboard m.SaveDashboard = SaveDashboard m.SearchQuery = SearchQuery