package server import ( "context" "os" "github.com/ekzyis/hermes/pages" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" ) type Server struct { *echo.Echo } func New() *Server { e := echo.New() e.Static("/", "public") e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{ Format: "${time_custom} ${remote_ip} ${method} ${uri} ${status}\n", CustomTimeFormat: "2006-01-02 15:04:05.00000-0700", })) e.Use(middleware.CORSWithConfig(middleware.CORSConfig{ // TODO: add CORS origins AllowOrigins: []string{}, AllowCredentials: true, AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept}, })) // TODO: attach error handler // e.HTTPErrorHandler = ... e.GET("/", func(c echo.Context) error { return pages.Index().Render(getContext(c), c.Response().Writer) }) s := &Server{e} return s } func getContext(c echo.Context) context.Context { ctx := c.Request().Context() ctx = context.WithValue(ctx, "env", os.Getenv("ENVIRONMENT")) ctx = context.WithValue(ctx, "session", c.Get("session")) ctx = context.WithValue(ctx, "commit", os.Getenv("GIT_COMMIT")) ctx = context.WithValue(ctx, "path", c.Request().URL.Path) return ctx }