package main import ( "context" "log" "net/http" "strings" "github.com/rs/cors" "go.sour.is/pkg/env" "go.sour.is/pkg/lg" "go.sour.is/pkg/mux" "go.sour.is/pkg/service" "go.sour.is/pkg/slice" ) var _ = apps.Register(20, func(ctx context.Context, svc *service.Harness) error { s := &http.Server{} svc.Add(s) mux := mux.New() s.Handler = mux s.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println(r.Method, r.URL.Path) mux.ServeHTTP(w, r) }) s.Handler = cors.AllowAll().Handler(s.Handler) s.Addr = env.Default("HTTP_LISTEN", ":8080") if strings.HasPrefix(s.Addr, ":") { s.Addr = "[::]" + s.Addr } svc.OnStart(func(ctx context.Context) error { _, span := lg.Span(ctx) defer span.End() log.Print("Listen on ", s.Addr) span.AddEvent("begin listen and serve on " + s.Addr) mux.Add(slice.FilterType[interface{ RegisterHTTP(*http.ServeMux) }](svc.Services...)...) return s.ListenAndServe() }) svc.OnStop(s.Shutdown) return nil })