package router import ( "context" "fmt" "github.com/gorilla/handlers" "github.com/gorilla/mux" "net" "net/http" "sonarqube-badge/config" "sonarqube-badge/router/api" "sonarqube-badge/router/views" ) func StartServer(ctx context.Context) { r := mux.NewRouter() // API ROUTES api.ProjectRouter(r.PathPrefix("/api/project").Subrouter()) api.LoginRouter(r.PathPrefix("/api/login").Subrouter()) api.UserRouter(r.PathPrefix("/api/user").Subrouter()) // VIEW ROUTES views.IndexRouter(r) views.LoginRouter(r) views.ProjectRouter(r) views.BadgeRouter(r) views.UserRouter(r) credentials := handlers.AllowCredentials() methods := handlers.AllowedMethods([]string{"POST", "GET", "DELETE"}) ttl := handlers.MaxAge(3600) port := ctx.Value("config").(config.Config).Port if port == 0 { port = 8080 } fmt.Printf("Starting server on http://localhost:%d ...", port) server := http.Server{ Addr: fmt.Sprintf(":%d", port), BaseContext: func(listener net.Listener) context.Context { return ctx }, Handler: handlers.CORS(credentials, methods, ttl)(r), } err := server.ListenAndServe() if err != nil { panic(err) } }