api.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package api
  2. import (
  3. "fmt"
  4. "html/template"
  5. "github.com/gin-gonic/gin"
  6. "github.com/gorilla/sessions"
  7. "github.com/torkelo/grafana-pro/pkg/components"
  8. "github.com/torkelo/grafana-pro/pkg/configuration"
  9. "github.com/torkelo/grafana-pro/pkg/log"
  10. "github.com/torkelo/grafana-pro/pkg/models"
  11. "github.com/torkelo/grafana-pro/pkg/setting"
  12. "github.com/torkelo/grafana-pro/pkg/stores"
  13. )
  14. type HttpServer struct {
  15. port string
  16. shutdown chan bool
  17. store stores.Store
  18. renderer *components.PhantomRenderer
  19. router *gin.Engine
  20. cfg *configuration.Cfg
  21. }
  22. var sessionStore = sessions.NewCookieStore([]byte("something-very-secret"))
  23. func NewHttpServer(cfg *configuration.Cfg, store stores.Store) *HttpServer {
  24. self := &HttpServer{}
  25. self.cfg = cfg
  26. self.port = cfg.Http.Port
  27. self.store = store
  28. self.renderer = &components.PhantomRenderer{ImagesDir: "data/png", PhantomDir: "_vendor/phantomjs"}
  29. return self
  30. }
  31. func (self *HttpServer) ListenAndServe() {
  32. defer func() { self.shutdown <- true }()
  33. gin.SetMode(gin.ReleaseMode)
  34. self.router = gin.New()
  35. self.router.Use(gin.Recovery(), apiLogger(), CacheHeadersMiddleware())
  36. self.router.Static("/public", "./public")
  37. self.router.Static("/app", "./public/app")
  38. self.router.Static("/img", "./public/img")
  39. // register & parse templates
  40. templates := template.New("templates")
  41. templates.Delims("[[", "]]")
  42. templates.ParseFiles("./views/index.html")
  43. self.router.SetHTMLTemplate(templates)
  44. for _, fn := range routeHandlers {
  45. fn(self)
  46. }
  47. // register default route
  48. self.router.GET("/", self.auth(), self.index)
  49. self.router.GET("/dashboard/*_", self.auth(), self.index)
  50. self.router.GET("/admin/*_", self.auth(), self.index)
  51. self.router.GET("/account/*_", self.auth(), self.index)
  52. listenAddr := fmt.Sprintf("%s:%s", setting.HttpAddr, setting.HttpPort)
  53. log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubUrl)
  54. self.router.Run(listenAddr)
  55. }
  56. func (self *HttpServer) index(c *gin.Context) {
  57. viewModel := &IndexDto{}
  58. userAccount, _ := c.Get("userAccount")
  59. account, _ := userAccount.(*models.Account)
  60. initCurrentUserDto(&viewModel.User, account)
  61. c.HTML(200, "index.html", viewModel)
  62. }
  63. func CacheHeadersMiddleware() gin.HandlerFunc {
  64. return func(c *gin.Context) {
  65. c.Writer.Header().Add("Cache-Control", "max-age=0, public, must-revalidate, proxy-revalidate")
  66. }
  67. }