package hsts import ( "fmt" "log/slog" "net" "net/http" "os" "uuid" g "gobang" ) var countRedirection = g.MakeCounter("request-redirection") func redirectHandler(w http.ResponseWriter, r *http.Request) { target := "https://" + r.Host + r.RequestURI http.Redirect(w, r, target, http.StatusMovedPermanently) countRedirection( "id", uuid.New().String(), "url-path", r.URL.Path, "req-pattern", r.Pattern, "method", r.Method, "host", r.Host, "uri", r.RequestURI, ) } func listen(fromAddr string) net.Listener { listener, err := net.Listen("unix", fromAddr) g.FatalIf(err) g.Info( "Started listening", "listen-start", "from-address", fromAddr, slog.Group( "versions", "uuid", uuid.Version, "gobang", g.Version, "hsts", Version, ), ) return listener } func Main() { g.Init("program", "hsts") if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s LISTEN.socket\n", os.Args[0]) os.Exit(2) } listener := listen(os.Args[1]) err := http.Serve(listener, http.HandlerFunc(redirectHandler)) g.FatalIf(err) }