summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/hsts.go62
-rw-r--r--src/main.go7
2 files changed, 69 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)
+}
diff --git a/src/main.go b/src/main.go
new file mode 100644
index 0000000..9d796c6
--- /dev/null
+++ b/src/main.go
@@ -0,0 +1,7 @@
+package main
+
+import "hsts"
+
+func main() {
+ hsts.Main()
+}