context.go 1.8 KB

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