func main() { demoData := Data{ Id: 5, Name: "User name", Tags: []string{"people", "customer", "developer"}, } e := echo.New() e.SetDebug(true) e.Use(middleware.Logger()) e.Use(middleware.Recover()) s := stats.New() e.Use(standard.WrapMiddleware(s.Handler)) e.GET("/xml", func(c echo.Context) error { return c.XML(200, demoData) }) e.GET("/json", func(c echo.Context) error { return c.JSON(200, demoData) }) e.GET("/error", func(c echo.Context) error { return echo.NewHTTPError(500, "Error here") }) e.Run(standard.New(":8888")) }
func Init(e *echo.Echo, Debug bool) { c := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, AllowedMethods: []string{"GET", "POST", "DELETE", "PUT", "PATCH"}, AllowCredentials: true, Debug: Debug, }) e.Use(standard.WrapMiddleware(c.Handler)) }
func main() { err := config.Load() if err != nil { log.Fatal("Failed to load configuration: ", err) } backend, err := backend.Init() if err != nil { log.Fatal("Failed to initialize backend: ", err) } e := echo.New() e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{ Format: "${time_rfc3339}: ${status} ${latency_human} ${method} ${uri} - ${tx_bytes} bytes\n", })) e.Use(middleware.Recover()) websocketHandler := ws.NewHandler(backend) fileServer := http.FileServer(&assetfs.AssetFS{ Asset: frontend.Asset, AssetDir: frontend.AssetDir, AssetInfo: frontend.AssetInfo, Prefix: "/", }) e.Use(standard.WrapMiddleware(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if strings.HasPrefix(r.RequestURI, "/ws") { websocketHandler.ServeHTTP(w, r) } else if r.RequestURI == "/" { fileServer.ServeHTTP(w, r) } else if _, err := frontend.Asset(r.RequestURI[1:]); err == nil { fileServer.ServeHTTP(w, r) } else { next.ServeHTTP(w, r) } }) })) e.Run(standard.New(config.Conf.HTTPPort)) }
func main() { // Echo instance e := echo.New() // Middleware echo e.Use(middleware.Logger()) logg := e.Logger() e.Use(middleware.Recover()) e.Use(middleware.Gzip()) e.Use(middleware.Secure()) e.Use(middleware.CORS()) e.Use(middleware.BodyLimit("200M")) // gopkg.in/mgo.v2 db := midd.NewMgo(viper.GetString("db.url"), viper.GetString("db.name")) defer db.Session.Close() e.Use(midd.Mgo(db)) // github.com/thoas/stats middStat := stats.New() e.Use(standard.WrapMiddleware(middStat.Handler)) // Route for stats e.Get("/stats", echo.HandlerFunc(func(c echo.Context) error { return c.JSON(http.StatusOK, middStat.Data()) })) // API v1 Restricted group Token in header api := e.Group("/apiv1") api.Use(middleware.JWTWithConfig(middleware.JWTConfig{ SigningKey: []byte(midd.SigningKey), TokenLookup: "header:Authorization"})) api.Post("/user", handler.PostUser) api.Get("/user/:id", handler.GetUser) // API v1 Token as first param apit := e.Group("/apiv1token") apit.Use(middleware.JWTWithConfig(middleware.JWTConfig{ SigningKey: []byte(midd.SigningKey), TokenLookup: "query:token"})) apit.Post("/user", handler.PostUser) apit.Get("/user/:id", handler.GetUser) // Serve index file e.File("/", "public/index.html") // Serve favicon e.File("/favicon.ico", "public/favicon.ico") // Serve static files e.Static("/scripts", "public/scripts") midd.GenerateToken() // Get server info var svrHostname string if runtime.GOOS == "windows" { svrHostname = fmt.Sprintf("%s.%s", os.Getenv("COMPUTERNAME"), os.Getenv("USERDNSDOMAIN")) } else { svrHostname, _ = os.Hostname() } webInterfacePort := viper.GetString("web.interface") logg.Printf("%s for %s %s on %d cores\n%s%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH, runtime.NumCPU(), svrHostname, webInterfacePort) mgoInfo, _ := db.Session.BuildInfo() logg.Printf("MongoDB %s %d bits\n", mgoInfo.Version, mgoInfo.Bits) // github.com/tylerb/graceful std := standard.New(webInterfacePort) std.SetHandler(e) graceful.ListenAndServe(std.Server, 5*time.Second) }