| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package api
- import "github.com/gin-gonic/gin"
- func init() {
- addRoutes(func(self *HttpServer) {
- self.router.GET("/login/*_", self.index)
- self.router.POST("/login", self.loginPost)
- self.router.POST("/logout", self.logoutPost)
- })
- }
- type loginJsonModel struct {
- Email string `json:"email" binding:"required"`
- Password string `json:"password" binding:"required"`
- Remember bool `json:"remember"`
- }
- func (self *HttpServer) loginPost(c *gin.Context) {
- var loginModel loginJsonModel
- if !c.EnsureBody(&loginModel) {
- c.JSON(400, gin.H{"status": "bad request"})
- return
- }
- account, err := self.store.GetUserAccountLogin(loginModel.Email)
- if err != nil {
- c.JSON(400, gin.H{"status": "some error"})
- }
- if loginModel.Password != account.Password {
- c.JSON(401, gin.H{"status": "unauthorized"})
- return
- }
- session, _ := sessionStore.Get(c.Request, "grafana-session")
- session.Values["login"] = loginModel.Email
- session.Values["accountId"] = account.DatabaseId
- session.Save(c.Request, c.Writer)
- var resp = &LoginResultDto{}
- resp.Status = "Logged in"
- resp.User.Login = account.Login
- c.JSON(200, resp)
- }
- func (self *HttpServer) logoutPost(c *gin.Context) {
- session, _ := sessionStore.Get(c.Request, "grafana-session")
- session.Values["login"] = nil
- session.Save(c.Request, c.Writer)
- c.JSON(200, gin.H{"status": "logged out"})
- }
- type GrafanaReqContext struct {
- }
- type authenticatedAuthRouteFunc func(c *gin.Context, grc GrafanaReqContext)
- func (self *HttpServer) addAuthRoute(route string, handler authenticatedAuthRouteFunc) {
- self.router.GET(route, self.auth(), func(c *gin.Context) {
- })
- }
- func (self *HttpServer) auth() gin.HandlerFunc {
- return func(c *gin.Context) {
- session, _ := sessionStore.Get(c.Request, "grafana-session")
- if c.Request.URL.Path != "/login" && session.Values["login"] == nil {
- c.Writer.Header().Set("Location", "/login")
- c.Abort(302)
- return
- }
- c.Set("accountId", session.Values["accountId"])
- c.Set("login", session.Values["login"])
- session.Save(c.Request, c.Writer)
- }
- }
|