render_auth.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package middleware
  2. import (
  3. "sync"
  4. "time"
  5. m "github.com/grafana/grafana/pkg/models"
  6. "github.com/grafana/grafana/pkg/util"
  7. )
  8. var renderKeysLock sync.Mutex
  9. var renderKeys map[string]*m.SignedInUser = make(map[string]*m.SignedInUser)
  10. func initContextWithRenderAuth(ctx *m.ReqContext) bool {
  11. key := ctx.GetCookie("renderKey")
  12. if key == "" {
  13. return false
  14. }
  15. renderKeysLock.Lock()
  16. defer renderKeysLock.Unlock()
  17. renderUser, exists := renderKeys[key]
  18. if !exists {
  19. ctx.JsonApiErr(401, "Invalid Render Key", nil)
  20. return true
  21. }
  22. ctx.IsSignedIn = true
  23. ctx.SignedInUser = renderUser
  24. ctx.IsRenderCall = true
  25. ctx.LastSeenAt = time.Now()
  26. return true
  27. }
  28. func AddRenderAuthKey(orgId int64, userId int64, orgRole m.RoleType) string {
  29. renderKeysLock.Lock()
  30. key := util.GetRandomString(32)
  31. renderKeys[key] = &m.SignedInUser{
  32. OrgId: orgId,
  33. OrgRole: orgRole,
  34. UserId: userId,
  35. }
  36. renderKeysLock.Unlock()
  37. return key
  38. }
  39. func RemoveRenderAuthKey(key string) {
  40. renderKeysLock.Lock()
  41. delete(renderKeys, key)
  42. renderKeysLock.Unlock()
  43. }