context.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. UserToken *UserToken
  14. // This should only be used by the auth_proxy
  15. Session session.SessionStore
  16. IsSignedIn bool
  17. IsRenderCall bool
  18. AllowAnonymous bool
  19. SkipCache bool
  20. Logger log.Logger
  21. }
  22. // Handle handles and logs error by given status.
  23. func (ctx *ReqContext) Handle(status int, title string, err error) {
  24. if err != nil {
  25. ctx.Logger.Error(title, "error", err)
  26. if setting.Env != setting.PROD {
  27. ctx.Data["ErrorMsg"] = err
  28. }
  29. }
  30. ctx.Data["Title"] = title
  31. ctx.Data["AppSubUrl"] = setting.AppSubUrl
  32. ctx.Data["Theme"] = "dark"
  33. ctx.HTML(status, setting.ERR_TEMPLATE_NAME)
  34. }
  35. func (ctx *ReqContext) JsonOK(message string) {
  36. resp := make(map[string]interface{})
  37. resp["message"] = message
  38. ctx.JSON(200, resp)
  39. }
  40. func (ctx *ReqContext) IsApiRequest() bool {
  41. return strings.HasPrefix(ctx.Req.URL.Path, "/api")
  42. }
  43. func (ctx *ReqContext) JsonApiErr(status int, message string, err error) {
  44. resp := make(map[string]interface{})
  45. if err != nil {
  46. ctx.Logger.Error(message, "error", err)
  47. if setting.Env != setting.PROD {
  48. resp["error"] = err.Error()
  49. }
  50. }
  51. switch status {
  52. case 404:
  53. resp["message"] = "Not Found"
  54. case 500:
  55. resp["message"] = "Internal Server Error"
  56. }
  57. if message != "" {
  58. resp["message"] = message
  59. }
  60. ctx.JSON(status, resp)
  61. }
  62. func (ctx *ReqContext) HasUserRole(role RoleType) bool {
  63. return ctx.OrgRole.Includes(role)
  64. }
  65. func (ctx *ReqContext) HasHelpFlag(flag HelpFlags1) bool {
  66. return ctx.HelpFlags1.HasFlag(flag)
  67. }
  68. func (ctx *ReqContext) TimeRequest(timer prometheus.Summary) {
  69. ctx.Data["perfmon.timer"] = timer
  70. }