add log middleware (just for testing)

This commit is contained in:
odweta
2026-04-03 07:33:53 +02:00
parent eae9e34ddf
commit 5aa78e8bca
2 changed files with 46 additions and 10 deletions
+10 -9
View File
@@ -1,9 +1,9 @@
package main
import (
"fmt"
"net/http"
"os"
"fmt"
"github.com/go-chi/chi/v5"
)
@@ -11,15 +11,16 @@ import (
func main() {
connectDB()
r := chi.NewRouter()
router := chi.NewRouter()
r.Use(authMiddleware)
router.Use(logMiddleware)
router.Use(authMiddleware)
// routes
r.Get("/quotes", getQuotes)
r.Post("/quotes", createQuote)
r.Put("/quotes/{id}", updateQuote)
r.Delete("/quotes/{id}", deleteQuote)
router.Get("/quotes", getQuotes)
router.Post("/quotes", createQuote)
router.Put("/quotes/{id}", updateQuote)
router.Delete("/quotes/{id}", deleteQuote)
port := os.Getenv("PORT")
if port == "" {
@@ -27,5 +28,5 @@ func main() {
}
fmt.Println("started and listening on localhost:" + port)
http.ListenAndServe(":"+port, r)
}
http.ListenAndServe(":"+port, router)
}
+36 -1
View File
@@ -1,8 +1,14 @@
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
"time"
"crypto/subtle"
)
func authMiddleware(next http.Handler) http.Handler {
@@ -18,7 +24,7 @@ func authMiddleware(next http.Handler) http.Handler {
expectedHeader := "Bearer " + expectedKey
if authHeader != expectedHeader {
if subtle.ConstantTimeCompare([]byte(authHeader), []byte(expectedHeader)) != 1 {
http.Error(w, "unauthorized", http.StatusUnauthorized)
return
}
@@ -26,3 +32,32 @@ func authMiddleware(next http.Handler) http.Handler {
next.ServeHTTP(w, r)
})
}
func logMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
reqMethod := r.Method
reqUrl := r.URL.String()
reqIp := r.RemoteAddr
reqHeaderContentType := r.Header.Get("Content-Type")
defer r.Body.Close()
bodyBytes, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "[log] Failed to read body", http.StatusBadRequest)
return
}
fmt.Printf("\n[%s] %s request on %s\n", reqIp, reqMethod, reqUrl)
fmt.Println("Timestamp (UTC): " + time.Now().UTC().String())
fmt.Println("Header Content-Type: " + reqHeaderContentType)
if len(bodyBytes) == 0 {
fmt.Println("Body: <empty>")
} else {
fmt.Println("Body: " + string(bodyBytes))
}
// restore the request body for later
r.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
next.ServeHTTP(w, r)
})
}