api.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package api
  2. import (
  3. "github.com/Unknwon/macaron"
  4. "github.com/torkelo/grafana-pro/pkg/api/dtos"
  5. "github.com/torkelo/grafana-pro/pkg/middleware"
  6. "github.com/torkelo/grafana-pro/pkg/setting"
  7. )
  8. // Register adds http routes
  9. func Register(m *macaron.Macaron) {
  10. reqSignedIn := middleware.Auth(&middleware.AuthOptions{ReqSignedIn: true})
  11. reqAdmin := middleware.Auth(&middleware.AuthOptions{ReqSignedIn: true, ReqAdmin: true})
  12. // not logged in views
  13. m.Get("/", reqSignedIn, Index)
  14. m.Post("/logout", LogoutPost)
  15. m.Post("/login", LoginPost)
  16. m.Get("/login/:name", OAuthLogin)
  17. m.Get("/login", Index)
  18. // authed views
  19. m.Get("/account/", reqSignedIn, Index)
  20. m.Get("/account/datasources/", reqSignedIn, Index)
  21. m.Get("/admin", reqSignedIn, Index)
  22. m.Get("/dashboard/*", reqSignedIn, Index)
  23. // sign up
  24. m.Get("/signup", Index)
  25. m.Post("/api/account/signup", SignUp)
  26. // authed api
  27. m.Group("/api", func() {
  28. // account
  29. m.Group("/account", func() {
  30. m.Get("/", GetAccount)
  31. m.Put("/collaborators", AddCollaborator)
  32. m.Delete("/collaborators/:id", RemoveCollaborator)
  33. m.Post("/using/:id", SetUsingAccount)
  34. m.Get("/others", GetOtherAccounts)
  35. })
  36. // Token
  37. m.Group("/tokens", func() {
  38. m.Combo("/").Get(GetTokens).Put(AddToken).Post(UpdateToken)
  39. m.Delete("/:id", DeleteToken)
  40. })
  41. // Data sources
  42. m.Group("/datasources", func() {
  43. m.Combo("/").Get(GetDataSources).Put(AddDataSource).Post(UpdateDataSource)
  44. m.Delete("/:id", DeleteDataSource)
  45. m.Any("/proxy/:id/*", reqSignedIn, ProxyDataSourceRequest)
  46. })
  47. // Dashboard
  48. m.Group("/dashboard", func() {
  49. m.Combo("/:slug").Get(GetDashboard).Delete(DeleteDashboard)
  50. m.Post("/", PostDashboard)
  51. })
  52. // Search
  53. m.Get("/search/", Search)
  54. // metrics
  55. m.Get("/metrics/test", GetTestMetrics)
  56. }, reqSignedIn)
  57. // admin api
  58. m.Group("/api/admin", func() {
  59. m.Get("/accounts", AdminSearchAccounts)
  60. }, reqAdmin)
  61. // rendering
  62. m.Get("/render/*", reqSignedIn, RenderToPng)
  63. m.NotFound(NotFound)
  64. }
  65. func setIndexViewData(c *middleware.Context) error {
  66. settings, err := getFrontendSettings(c)
  67. if err != nil {
  68. return err
  69. }
  70. c.Data["User"] = dtos.NewCurrentUser(c.UserAccount)
  71. c.Data["Settings"] = settings
  72. c.Data["AppUrl"] = setting.AppUrl
  73. c.Data["AppSubUrl"] = setting.AppSubUrl
  74. return nil
  75. }
  76. func Index(c *middleware.Context) {
  77. if err := setIndexViewData(c); err != nil {
  78. c.Handle(500, "Failed to get settings", err)
  79. return
  80. }
  81. c.HTML(200, "index")
  82. }
  83. func NotFound(c *middleware.Context) {
  84. if c.IsApiRequest() {
  85. c.JsonApiErr(200, "Not found", nil)
  86. return
  87. }
  88. if err := setIndexViewData(c); err != nil {
  89. c.Handle(500, "Failed to get settings", err)
  90. return
  91. }
  92. c.HTML(404, "index")
  93. }