|
|
|
|
@ -1,8 +1,13 @@ |
|
|
|
|
package api |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"github.com/gin-gonic/gin" |
|
|
|
|
"errors" |
|
|
|
|
"strconv" |
|
|
|
|
|
|
|
|
|
"github.com/torkelo/grafana-pro/pkg/models" |
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin" |
|
|
|
|
"github.com/gorilla/sessions" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type authContext struct { |
|
|
|
|
@ -19,16 +24,34 @@ func (self *HttpServer) authDenied(c *gin.Context) { |
|
|
|
|
c.Abort(302) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func authGetRequestAccountId(c *gin.Context, session *sessions.Session) (int, error) { |
|
|
|
|
accountId := session.Values["accountId"] |
|
|
|
|
|
|
|
|
|
urlQuery := c.Request.URL.Query() |
|
|
|
|
if len(urlQuery["render"]) > 0 { |
|
|
|
|
accId, _ := strconv.Atoi(urlQuery["accountId"][0]) |
|
|
|
|
session.Values["accountId"] = accId |
|
|
|
|
accountId = accId |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if accountId == nil { |
|
|
|
|
return -1, errors.New("Auth: session account id not found") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return accountId.(int), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (self *HttpServer) auth() gin.HandlerFunc { |
|
|
|
|
return func(c *gin.Context) { |
|
|
|
|
session, _ := sessionStore.Get(c.Request, "grafana-session") |
|
|
|
|
accountId, err := authGetRequestAccountId(c, session) |
|
|
|
|
|
|
|
|
|
if c.Request.URL.Path != "/login" && session.Values["accountId"] == nil { |
|
|
|
|
if err != nil && c.Request.URL.Path != "/login" { |
|
|
|
|
self.authDenied(c) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
account, err := self.store.GetAccount(session.Values["accountId"].(int)) |
|
|
|
|
account, err := self.store.GetAccount(accountId) |
|
|
|
|
if err != nil { |
|
|
|
|
self.authDenied(c) |
|
|
|
|
return |
|
|
|
|
@ -42,7 +65,6 @@ func (self *HttpServer) auth() gin.HandlerFunc { |
|
|
|
|
|
|
|
|
|
c.Set("userAccount", account) |
|
|
|
|
c.Set("usingAccount", usingAccount) |
|
|
|
|
|
|
|
|
|
session.Save(c.Request, c.Writer) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|