api.go 2.1 KB

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