github.com/resonatecoop/id@v1.1.0-43/cmd/run_server.go (about) 1 package cmd 2 3 import ( 4 "net/http" 5 "time" 6 7 "github.com/gorilla/csrf" 8 "github.com/gorilla/mux" 9 "github.com/phyber/negroni-gzip/gzip" 10 "github.com/resonatecoop/id/log" 11 "github.com/resonatecoop/id/services" 12 "github.com/unrolled/secure" 13 "github.com/urfave/negroni" 14 "gopkg.in/tylerb/graceful.v1" 15 ) 16 17 // RunServer runs the app 18 func RunServer(configBackend string) error { 19 cnf, db, err := initConfigDB(true, true, configBackend) 20 if err != nil { 21 return err 22 } 23 defer db.Close() 24 25 // start the services 26 if err := services.Init(cnf, db); err != nil { 27 return err 28 } 29 defer services.Close() 30 31 secureMiddleware := secure.New(secure.Options{ 32 FrameDeny: false, // already set in web/render.go 33 ContentTypeNosniff: true, 34 BrowserXssFilter: true, 35 IsDevelopment: cnf.IsDevelopment, 36 }) 37 // Start a classic negroni app 38 app := negroni.New() 39 app.Use(negroni.NewRecovery()) 40 app.Use(negroni.NewLogger()) 41 app.Use(gzip.Gzip(gzip.DefaultCompression)) 42 app.Use(negroni.HandlerFunc(secureMiddleware.HandlerFuncWithNext)) 43 app.Use(negroni.NewStatic(http.Dir("public"))) 44 45 // Create a router instance 46 router := mux.NewRouter() 47 48 // Add routes 49 services.HealthService.RegisterRoutes(router, "/v1") 50 services.OauthService.RegisterRoutes(router, "/v1/oauth") 51 services.WebHookService.RegisterRoutes(router, "/webhook") 52 53 webRoutes := mux.NewRouter() 54 services.WebService.RegisterRoutes(webRoutes, "/web") 55 56 CSRF := csrf.Protect( 57 []byte(cnf.CSRF.Key), 58 csrf.Path("/"), 59 csrf.SameSite(csrf.SameSiteLaxMode), 60 csrf.TrustedOrigins([]string{cnf.CSRF.Origins}), 61 ) 62 63 router.PathPrefix("").Handler(negroni.New( 64 negroni.Wrap(CSRF(webRoutes)), 65 )) 66 67 // Set the router 68 app.UseHandler(router) 69 70 log.INFO.Printf("Starting server on localhost%v", cnf.Port) 71 // Run the server on port 8080 by default, gracefully stop on SIGTERM signal 72 graceful.Run(cnf.Port, 5*time.Second, app) 73 74 return nil 75 }