context.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 UserAuthToken struct {
  11. Id int64
  12. UserId int64
  13. AuthToken string
  14. PrevAuthToken string
  15. UserAgent string
  16. ClientIp string
  17. AuthTokenSeen bool
  18. SeenAt int64
  19. RotatedAt int64
  20. CreatedAt int64
  21. UpdatedAt int64
  22. UnhashedToken string `xorm:"-"`
  23. }
  24. type ReqContext struct {
  25. *macaron.Context
  26. *SignedInUser
  27. UserToken *UserAuthToken
  28. Session session.SessionStore
  29. IsSignedIn bool
  30. IsRenderCall bool
  31. AllowAnonymous bool
  32. SkipCache bool
  33. Logger log.Logger
  34. }
  35. // Handle handles and logs error by given status.
  36. func (ctx *ReqContext) Handle(status int, title string, err error) {
  37. if err != nil {
  38. ctx.Logger.Error(title, "error", err)
  39. if setting.Env != setting.PROD {
  40. ctx.Data["ErrorMsg"] = err
  41. }
  42. }
  43. ctx.Data["Title"] = title
  44. ctx.Data["AppSubUrl"] = setting.AppSubUrl
  45. ctx.Data["Theme"] = "dark"
  46. ctx.HTML(status, setting.ERR_TEMPLATE_NAME)
  47. }
  48. func (ctx *ReqContext) JsonOK(message string) {
  49. resp := make(map[string]interface{})
  50. resp["message"] = message
  51. ctx.JSON(200, resp)
  52. }
  53. func (ctx *ReqContext) IsApiRequest() bool {
  54. return strings.HasPrefix(ctx.Req.URL.Path, "/api")
  55. }
  56. func (ctx *ReqContext) JsonApiErr(status int, message string, err error) {
  57. resp := make(map[string]interface{})
  58. if err != nil {
  59. ctx.Logger.Error(message, "error", err)
  60. if setting.Env != setting.PROD {
  61. resp["error"] = err.Error()
  62. }
  63. }
  64. switch status {
  65. case 404:
  66. resp["message"] = "Not Found"
  67. case 500:
  68. resp["message"] = "Internal Server Error"
  69. }
  70. if message != "" {
  71. resp["message"] = message
  72. }
  73. ctx.JSON(status, resp)
  74. }
  75. func (ctx *ReqContext) HasUserRole(role RoleType) bool {
  76. return ctx.OrgRole.Includes(role)
  77. }
  78. func (ctx *ReqContext) HasHelpFlag(flag HelpFlags1) bool {
  79. return ctx.HelpFlags1.HasFlag(flag)
  80. }
  81. func (ctx *ReqContext) TimeRequest(timer prometheus.Summary) {
  82. ctx.Data["perfmon.timer"] = timer
  83. }