api_login.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package api
  2. import (
  3. "github.com/torkelo/grafana-pro/pkg/api/dtos"
  4. "github.com/torkelo/grafana-pro/pkg/log"
  5. "github.com/torkelo/grafana-pro/pkg/middleware"
  6. "github.com/torkelo/grafana-pro/pkg/models"
  7. "github.com/torkelo/grafana-pro/pkg/utils"
  8. )
  9. type loginJsonModel struct {
  10. Email string `json:"email" binding:"required"`
  11. Password string `json:"password" binding:"required"`
  12. Remember bool `json:"remember"`
  13. }
  14. func LoginPost(c *middleware.Context) {
  15. var loginModel loginJsonModel
  16. if !c.JsonBody(&loginModel) {
  17. c.JSON(400, utils.DynMap{"status": "bad request"})
  18. return
  19. }
  20. account, err := models.GetAccountByLogin(loginModel.Email)
  21. if err != nil {
  22. c.JSON(401, utils.DynMap{"status": "unauthorized"})
  23. return
  24. }
  25. if loginModel.Password != account.Password {
  26. c.JSON(401, utils.DynMap{"status": "unauthorized"})
  27. return
  28. }
  29. loginUserWithAccount(account, c)
  30. var resp = &dtos.LoginResult{}
  31. resp.Status = "Logged in"
  32. resp.User.Login = account.Login
  33. c.JSON(200, resp)
  34. }
  35. func loginUserWithAccount(account *models.Account, c *middleware.Context) {
  36. if account == nil {
  37. log.Error(3, "Account login with nil account")
  38. }
  39. c.Session.Set("accountId", account.Id)
  40. }
  41. func LogoutPost(c *middleware.Context) {
  42. c.Session.Delete("accountId")
  43. c.JSON(200, utils.DynMap{"status": "logged out"})
  44. }