diff options
Diffstat (limited to 'src/hsts.go')
-rw-r--r-- | src/hsts.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/hsts.go b/src/hsts.go new file mode 100644 index 0000000..16082de --- /dev/null +++ b/src/hsts.go @@ -0,0 +1,62 @@ +package hsts + +import ( + "fmt" + "log/slog" + "net" + "net/http" + "os" + + "guuid" + 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", guuid.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", + "guuid", guuid.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) +} |