From 031d3006d8907f50a17ed02aea3190723f45b3fd Mon Sep 17 00:00:00 2001 From: Acid Date: Fri, 5 Jun 2026 17:36:41 -0400 Subject: [PATCH] added db connections and ip login --- .gitignore | 3 +++ connections.go | 41 +++++++++++++++++++++++++++++++++++++++++ go.mod | 4 ++-- main.go | 22 ++++++++++++++++++---- seed.sql | 5 ++--- 5 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 connections.go diff --git a/.gitignore b/.gitignore index 014727a..39e4ef7 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ scrap/ *.sqlite3 *.db init.sql +.prettierignore +.vscode/ +query.sql diff --git a/connections.go b/connections.go new file mode 100644 index 0000000..fed51b2 --- /dev/null +++ b/connections.go @@ -0,0 +1,41 @@ +package main + +import ( + "database/sql" + "log" + "time" + + _ "github.com/mattn/go-sqlite3" +) + +// logs level=('debug', 'info', 'warning', 'error') +type logs struct { + level string + ip string + traceback string + date time.Time +} + +type dbStruct struct { + db *sql.DB +} + +// InsertLog() : database method, only inserts level + traceback +func (app *dbStruct) InsertLog(lg logs) { + query := `INSERT INTO logs (level, traceback) VALUES (?, ?)` + + _, err := app.db.Exec(query, lg.level, lg.traceback) + if err != nil { + log.Fatal(err) + } +} + +// InsertLog() : database method, logs level + Ip +func (app *dbStruct) LogIp(lg logs) { + query := `INSERT INTO logs (level, ip) VALUES (?, ?)` + + _, err := app.db.Exec(query, lg.level, lg.ip) + if err != nil { + log.Fatal(err) + } +} diff --git a/go.mod b/go.mod index cf6310b..2a9cd35 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,6 @@ module acidburnmonkey/acidarchon go 1.26.2 require ( - github.com/joho/godotenv v1.5.1 // indirect - github.com/mattn/go-sqlite3 v1.14.44 // indirect + github.com/joho/godotenv v1.5.1 + github.com/mattn/go-sqlite3 v1.14.44 ) diff --git a/main.go b/main.go index 8f53157..5793835 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "database/sql" "encoding/json" "fmt" "io" @@ -48,14 +49,22 @@ type TemolateData struct { } func main() { + godotenv.Load() mux := http.NewServeMux() - godotenv.Load() + db, err := sql.Open("sqlite3", "zum.db") + if err != nil { + slog.Error("err opening db") + return + } + defer db.Close() + + database := &dbStruct{db: db} // routes - mux.HandleFunc("/", handleRoot) + mux.HandleFunc("/", database.handleRoot) mux.HandleFunc("/robots.txt", serveRobots) - mux.HandleFunc("/*", handleRoot) + mux.HandleFunc("/*", database.handleRoot) mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) @@ -64,10 +73,13 @@ func main() { } // Routes -func handleRoot(w http.ResponseWriter, r *http.Request) { + +// handleRoot() : part of dbStruct +func (app *dbStruct) handleRoot(w http.ResponseWriter, r *http.Request) { templ, err := template.ParseFiles("templates/home.html") if err != nil { http.Error(w, "template not found", http.StatusInternalServerError) + app.InsertLog(logs{level: "error", traceback: "template not found"}) return } @@ -85,6 +97,8 @@ func handleRoot(w http.ResponseWriter, r *http.Request) { dox := callApi(host) dox2 := secondApi(host) + app.LogIp(logs{level: "info", ip: dox.IP}) + templ.Execute(w, TemolateData{Ip: dox, IP2: *dox2}) } diff --git a/seed.sql b/seed.sql index ffcff0b..0ce9ac0 100644 --- a/seed.sql +++ b/seed.sql @@ -3,6 +3,5 @@ CREATE TABLE IF NOT EXISTS logs ( level TEXT NOT NULL CHECK(level IN ('debug', 'info', 'warning', 'error')), ip TEXT, traceback TEXT, - date DATETIME, - repeating INTEGER -); \ No newline at end of file + date DATETIME DEFAULT (datetime('now', 'localtime')), +);