Serve html from golang server via template

This commit is contained in:
2025-01-01 14:33:35 +01:00
parent 10d588e1a7
commit e4e745cb57
3 changed files with 120 additions and 4 deletions
+41 -3
View File
@@ -4,6 +4,7 @@ import (
"database/sql"
"encoding/json"
"fmt"
"html/template"
"log"
"net/http"
@@ -16,7 +17,8 @@ const (
)
var (
db *sql.DB
db *sql.DB
indexHtmlTemplate *template.Template
)
type ChoicesPost struct {
@@ -60,6 +62,22 @@ func initDatabase() {
}
}
func prepareStaticContent() {
var err error
indexHtmlTemplate, err = template.ParseFiles("./static/index.html")
if err != nil {
log.Fatalf("[!] Could not parse index.html template, error: %s\n", err)
}
}
func handleGetRoot(w http.ResponseWriter, r *http.Request) {
err := indexHtmlTemplate.Execute(w, nil)
if err != nil {
log.Printf("[!] Could not execute index.html template, error: %s\n", err)
http.Error(w, "Error rendering template", http.StatusInternalServerError)
}
}
func handleGetPing(w http.ResponseWriter, r *http.Request) {
log.Printf("[*] Received request %v %v\n", r.Method, r.URL)
fmt.Fprintf(w, "PONG\n")
@@ -86,17 +104,30 @@ func handlePostSubmit(w http.ResponseWriter, r *http.Request) {
log.Printf("[!] Could not marshal choices, error: %s\n", err)
}
tx, err := db.Begin()
if err != nil {
log.Printf("[!] Could not begin database transaction, error: %s\n", err)
w.WriteHeader(http.StatusBadRequest)
return
}
const query = `
INSERT INTO choices (pollid, username, choices)
VALUES (?, ?, ?);
`
_, err = db.Exec(query, choicesPost.PollId, choicesPost.Username, string(choicesJson))
_, err = tx.Exec(query, choicesPost.PollId, choicesPost.Username, string(choicesJson))
if err != nil {
log.Printf("[!] Could not insert choices into database, error: %s\n", err)
tx.Rollback()
w.WriteHeader(http.StatusBadRequest)
return
}
log.Printf("[*] Persisted choices for %s to database\n", "DUMMY USERNAME")
tx.Commit()
log.Printf("[*] Persisted choices for poll %d, username %s to database\n",
choicesPost.PollId, choicesPost.Username)
w.WriteHeader(http.StatusOK)
}
@@ -112,11 +143,18 @@ func main() {
initDatabase()
defer db.Close()
prepareStaticContent()
http.HandleFunc(
"GET /api/ping",
handleGetPing,
)
http.HandleFunc(
"GET /",
handleGetRoot,
)
http.HandleFunc(
"POST /api/submit",
handlePostSubmit,