context.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package models
  2. import (
  3. "strings"
  4. "github.com/grafana/grafana/pkg/log"
  5. "github.com/grafana/grafana/pkg/services/auth"
  6. "github.com/grafana/grafana/pkg/services/session"
  7. "github.com/grafana/grafana/pkg/setting"
  8. "github.com/prometheus/client_golang/prometheus"
  9. "gopkg.in/macaron.v1"
  10. )
  11. type ReqContext struct {
  12. *macaron.Context
  13. *SignedInUser
  14. UserToken auth.UserToken
  15. // This should only be used by the auth_proxy
  16. Session session.SessionStore
  17. IsSignedIn bool
  18. IsRenderCall bool
  19. AllowAnonymous bool
  20. SkipCache bool
  21. Logger log.Logger
  22. }
  23. // Handle handles and logs error by given status.
  24. func (ctx *ReqContext) Handle(status int, title string, err error) {
  25. if err != nil {
  26. ctx.Logger.Error(title, "error", err)
  27. if setting.Env != setting.PROD {
  28. ctx.Data["ErrorMsg"] = err
  29. }
  30. }
  31. ctx.Data["Title"] = title
  32. ctx.Data["AppSubUrl"] = setting.AppSubUrl
  33. ctx.Data["Theme"] = "dark"
  34. ctx.HTML(status, setting.ERR_TEMPLATE_NAME)
  35. }
  36. func (ctx *ReqContext) JsonOK(message string) {
  37. resp := make(map[string]interface{})
  38. resp["message"] = message
  39. ctx.JSON(200, resp)
  40. }
  41. func (ctx *ReqContext) IsApiRequest() bool {
  42. return strings.HasPrefix(ctx.Req.URL.Path, "/api")
  43. }
  44. func (ctx *ReqContext) JsonApiErr(status int, message string, err error) {
  45. resp := make(map[string]interface{})
  46. if err != nil {
  47. ctx.Logger.Error(message, "error", err)
  48. if setting.Env != setting.PROD {
  49. resp["error"] = err.Error()
  50. }
  51. }
  52. switch status {
  53. case 404:
  54. resp["message"] = "Not Found"
  55. case 500:
  56. resp["message"] = "Internal Server Error"
  57. }
  58. if message != "" {
  59. resp["message"] = message
  60. }
  61. ctx.JSON(status, resp)
  62. }
  63. func (ctx *ReqContext) HasUserRole(role RoleType) bool {
  64. return ctx.OrgRole.Includes(role)
  65. }
  66. func (ctx *ReqContext) HasHelpFlag(flag HelpFlags1) bool {
  67. return ctx.HelpFlags1.HasFlag(flag)
  68. }
  69. func (ctx *ReqContext) TimeRequest(timer prometheus.Summary) {
  70. ctx.Data["perfmon.timer"] = timer
  71. }