diff --git a/pkg/middleware/auth.go b/pkg/middleware/auth.go index 8c337714847..3c66baf3ce0 100644 --- a/pkg/middleware/auth.go +++ b/pkg/middleware/auth.go @@ -6,6 +6,7 @@ import ( "github.com/Unknwon/macaron" "github.com/macaron-contrib/session" + "github.com/torkelo/grafana-pro/pkg/models" ) diff --git a/pkg/routes/api/api_dashboard.go b/pkg/routes/api/api_dashboard.go index 3a0152f8909..1762539d84e 100644 --- a/pkg/routes/api/api_dashboard.go +++ b/pkg/routes/api/api_dashboard.go @@ -1,11 +1,10 @@ package api import ( - "github.com/gin-gonic/gin" - "github.com/torkelo/grafana-pro/pkg/middleware" "github.com/torkelo/grafana-pro/pkg/models" "github.com/torkelo/grafana-pro/pkg/routes/apimodel" + "github.com/torkelo/grafana-pro/pkg/utils" ) func GetDashboard(c *middleware.Context) { @@ -88,5 +87,5 @@ func PostDashboard(c *middleware.Context) { return } - c.JSON(200, gin.H{"status": "success", "slug": dashboard.Slug}) + c.JSON(200, utils.DynMap{"status": "success", "slug": dashboard.Slug}) } diff --git a/pkg/routes/api/api_register.go b/pkg/routes/api/api_register.go new file mode 100644 index 00000000000..fa3f941d814 --- /dev/null +++ b/pkg/routes/api/api_register.go @@ -0,0 +1,38 @@ +package api + +import ( + "github.com/torkelo/grafana-pro/pkg/log" + "github.com/torkelo/grafana-pro/pkg/middleware" + "github.com/torkelo/grafana-pro/pkg/models" + "github.com/torkelo/grafana-pro/pkg/utils" +) + +type registerAccountJsonModel struct { + Email string `json:"email" binding:"required"` + Password string `json:"password" binding:"required"` + Password2 bool `json:"remember2"` +} + +func CreateAccount(c *middleware.Context) { + var registerModel registerAccountJsonModel + + if !c.JsonBody(®isterModel) { + c.JSON(400, utils.DynMap{"status": "bad request"}) + return + } + + account := models.Account{ + Login: registerModel.Email, + Email: registerModel.Email, + Password: registerModel.Password, + } + + err := models.CreateAccount(&account) + if err != nil { + log.Error(2, "Failed to create user account, email: %v, error: %v", registerModel.Email, err) + c.JSON(500, utils.DynMap{"status": "failed to create account"}) + return + } + + c.JSON(200, utils.DynMap{"status": "ok"}) +} diff --git a/pkg/routes/index.go b/pkg/routes/index.go index 50e4d6edb82..78aebf80698 100644 --- a/pkg/routes/index.go +++ b/pkg/routes/index.go @@ -20,6 +20,10 @@ func Register(m *macaron.Macaron) { m.Get("/login", Index) m.Get("/login/:name", login.OAuthLogin) + // user register + m.Get("/register/*_", Index) + m.Post("/api/account", api.CreateAccount) + // dashboards m.Get("/dashboard/*", auth, Index) m.Get("/api/dashboards/:slug", auth, api.GetDashboard) diff --git a/pkg/routes/login/login_oauth.go b/pkg/routes/login/login_oauth.go index 83f3412b7a9..f2321154b4b 100644 --- a/pkg/routes/login/login_oauth.go +++ b/pkg/routes/login/login_oauth.go @@ -53,7 +53,7 @@ func OAuthLogin(ctx *middleware.Context) { // create account if missing if err == models.ErrAccountNotFound { account = &models.Account{ - Login: userInfo.Login, + Login: userInfo.Email, Email: userInfo.Email, Name: userInfo.Name, Company: userInfo.Company, diff --git a/pkg/stores/sqlstore/sqlstore.go b/pkg/stores/sqlstore/sqlstore.go index 43e48886750..a6448f2d9ef 100644 --- a/pkg/stores/sqlstore/sqlstore.go +++ b/pkg/stores/sqlstore/sqlstore.go @@ -35,6 +35,7 @@ func Init() { models.GetDashboard = GetDashboard models.SaveDashboard = SaveDashboard models.SearchQuery = SearchQuery + models.DeleteDashboard = DeleteDashboard } func LoadModelsConfig() { diff --git a/pkg/stores/sqlstore/sqlstore_accounts.go b/pkg/stores/sqlstore/sqlstore_accounts.go index 60ea2034004..15a39bd15c1 100644 --- a/pkg/stores/sqlstore/sqlstore_accounts.go +++ b/pkg/stores/sqlstore/sqlstore_accounts.go @@ -27,8 +27,8 @@ func CreateAccount(account *models.Account) error { func GetAccount(id int64) (*models.Account, error) { var err error - account := &models.Account{Id: id} - has, err := x.Get(account) + var account models.Account + has, err := x.Id(id).Get(&account) if err != nil { return nil, err @@ -36,7 +36,11 @@ func GetAccount(id int64) (*models.Account, error) { return nil, models.ErrAccountNotFound } - return account, nil + if account.UsingAccountId == 0 { + account.UsingAccountId = account.Id + } + + return &account, nil } func GetAccountByLogin(emailOrLogin string) (*models.Account, error) { diff --git a/pkg/stores/sqlstore/sqlstore_dashboards.go b/pkg/stores/sqlstore/sqlstore_dashboards.go index 7b9af7d0f4d..dc3c81565a8 100644 --- a/pkg/stores/sqlstore/sqlstore_dashboards.go +++ b/pkg/stores/sqlstore/sqlstore_dashboards.go @@ -47,8 +47,18 @@ func SearchQuery(query string, accountId int64) ([]*models.SearchResult, error) sess := x.Limit(100, 0).Where("account_id=?", accountId) sess.Table("Dashboard") - var results []*models.SearchResult + results := make([]*models.SearchResult, 0) err := sess.Find(&results) return results, err } + +func DeleteDashboard(slug string, accountId int64) error { + sess := x.NewSession() + defer sess.Close() + + rawSql := "DELETE FROM Dashboard WHERE account_id=? and slug=?" + _, err := sess.Exec(rawSql, accountId, slug) + + return err +} diff --git a/pkg/utils/json.go b/pkg/utils/json.go new file mode 100644 index 00000000000..0685209c8e0 --- /dev/null +++ b/pkg/utils/json.go @@ -0,0 +1,3 @@ +package utils + +type DynMap map[string]interface{}