From c504f8c597d6f0c169518212aefdadd6a3612289 Mon Sep 17 00:00:00 2001 From: bronku Date: Fri, 21 Mar 2025 19:38:10 +0100 Subject: [PATCH] Add authentication middleware to HTTP handlers --- auth/auth.go | 31 +++++++++++++++++++++++++++++++ main.go | 10 ++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 auth/auth.go diff --git a/auth/auth.go b/auth/auth.go new file mode 100644 index 0000000..41d45f2 --- /dev/null +++ b/auth/auth.go @@ -0,0 +1,31 @@ +package auth + +import ( + "net/http" + "strconv" +) + +type Authenticator struct { +} + +func (a *Authenticator) Authenticate(in http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + c := http.Cookie{ + Name: "RequestCounter", + } + cookie, err := r.Cookie("RequestCounter") + if err != nil { + cookie = &http.Cookie{ + Value: "0", + } + } + count, err := strconv.Atoi(cookie.Value) + if err != nil { + c.Value = "1" + } else { + c.Value = strconv.Itoa(count + 1) + } + http.SetCookie(w, &c) + in(w, r) + } +} diff --git a/main.go b/main.go index 6f55b71..300e4bc 100644 --- a/main.go +++ b/main.go @@ -5,12 +5,14 @@ import ( "log" "net/http" + "github.com/Bronku/iroon/auth" _ "github.com/mattn/go-sqlite3" ) func main() { var err error var h handler + var a auth.Authenticator defer h.close() h.tmpl, err = template.ParseFiles("index.html", "order.html") @@ -23,8 +25,8 @@ func main() { log.Fatal("can't open the databse", err) } - http.HandleFunc("GET /order/", logger(h.form)) - http.HandleFunc("GET /", logger(h.index)) - http.HandleFunc("POST /", logger(h.addOrder)) - go http.ListenAndServe(":8080", nil) + http.HandleFunc("GET /order/", logger(a.Authenticate(h.form))) + http.HandleFunc("GET /", logger(a.Authenticate(h.index))) + http.HandleFunc("POST /", logger(a.Authenticate(h.addOrder))) + http.ListenAndServe(":8080", nil) }