package main import ( "database/sql" "fmt" "io" "log" _ "modernc.org/sqlite" "net/http" "strconv" ) var db *sql.DB func main() { // Open the database file var err error var config = New() db, err = sql.Open("sqlite", config.DbPath) if err != nil { log.Fatal(err) } defer func(db *sql.DB) { err := db.Close() if err != nil { log.Fatal(err) } }(db) db.SetMaxOpenConns(1) // Create requests table if it doesn't exist _, err = db.Exec(`CREATE TABLE IF NOT EXISTS requests ( remote_addr TEXT, url TEXT, method TEXT, authorization TEXT, body TEXT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`) if err != nil { log.Fatal(err) } // Setup HTTP server http.HandleFunc("/", logRequest) fmt.Println("Server listening on port", strconv.Itoa(config.Port)) err = http.ListenAndServe(":"+strconv.Itoa(config.Port), nil) if err != nil { log.Fatal(err) } } func logRequest(w http.ResponseWriter, r *http.Request) { // Read request body body := "" if r.Body != nil { defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { log.Fatal(err) } }(r.Body) buf := make([]byte, 1024) n, _ := r.Body.Read(buf) body = string(buf[:n]) } // Insert request data into database fmt.Println(r.RemoteAddr, r.URL.String(), r.Method, r.Header.Get("Authorization"), body) _, err := db.Exec("INSERT INTO requests (remote_addr, url, method, authorization, body) VALUES (?, ?, ?, ?, ?)", r.RemoteAddr, r.URL.String(), r.Method, r.Header.Get("Authorization"), body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // Respond to the request w.WriteHeader(http.StatusOK) }