api.go 2.0 KB

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