api_login.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package api
  2. import "github.com/gin-gonic/gin"
  3. func init() {
  4. addRoutes(func(self *HttpServer) {
  5. self.router.GET("/login/*_", self.index)
  6. self.router.GET("/register/*_", self.index)
  7. self.router.POST("/login", self.loginPost)
  8. self.router.POST("/logout", self.logoutPost)
  9. })
  10. }
  11. type loginJsonModel struct {
  12. Email string `json:"email" binding:"required"`
  13. Password string `json:"password" binding:"required"`
  14. Remember bool `json:"remember"`
  15. }
  16. func (self *HttpServer) loginPost(c *gin.Context) {
  17. var loginModel loginJsonModel
  18. if c.EnsureBody(&loginModel) {
  19. if loginModel.Email == "manu" && loginModel.Password == "123" {
  20. session, _ := sessionStore.Get(c.Request, "grafana-session")
  21. session.Values["login"] = true
  22. session.Save(c.Request, c.Writer)
  23. c.JSON(200, gin.H{"status": "you are logged in"})
  24. } else {
  25. c.JSON(401, gin.H{"status": "unauthorized"})
  26. }
  27. }
  28. }
  29. func (self *HttpServer) logoutPost(c *gin.Context) {
  30. session, _ := sessionStore.Get(c.Request, "grafana-session")
  31. session.Values["login"] = nil
  32. session.Save(c.Request, c.Writer)
  33. c.JSON(200, gin.H{"status": "logged out"})
  34. }
  35. func (self *HttpServer) authMiddleware() gin.HandlerFunc {
  36. return func(c *gin.Context) {
  37. session, _ := sessionStore.Get(c.Request, "grafana-session")
  38. if c.Request.URL.Path != "/login" && session.Values["login"] == nil {
  39. c.Writer.Header().Set("Location", "/login")
  40. c.Abort(302)
  41. }
  42. session.Save(c.Request, c.Writer)
  43. }
  44. }