add guestbook

This commit is contained in:
Travis Shears 2025-10-07 10:14:36 +02:00
parent 78ae49c2c7
commit 0bd065c2d1
7 changed files with 333 additions and 14 deletions

35
main.go
View file

@ -1,6 +1,7 @@
package main
import (
"database/sql"
"errors"
"flag"
"fmt"
@ -10,7 +11,10 @@ import (
"strings"
"time"
_ "github.com/mattn/go-sqlite3"
gemlog "gemini_site/internal/gemlog"
"gemini_site/internal/guestbook"
microblog "gemini_site/internal/microblog"
"gemini_site/internal/pocketbase"
@ -18,8 +22,9 @@ import (
)
type MainHandler struct {
blog microblog.Handler
gemlog gemlog.Handler
blog microblog.Handler
gemlog gemlog.Handler
guestbook guestbook.Handler
}
func (h MainHandler) ServeGemini(w gemini.ResponseWriter, req *gemini.Request) {
@ -28,14 +33,17 @@ func (h MainHandler) ServeGemini(w gemini.ResponseWriter, req *gemini.Request) {
"user", strings.Join(userName(req), " "))
// Check if this is a blog request
if strings.HasPrefix(req.URL.Path, "/microblog") {
switch {
case strings.HasPrefix(req.URL.Path, "/microblog"):
h.blog.HandleBlogRequest(w, req)
return
}
if strings.HasPrefix(req.URL.Path, "/gemlog") {
case strings.HasPrefix(req.URL.Path, "/gemlog"):
h.gemlog.HandleRequest(w, req)
return
case strings.HasPrefix(req.URL.Path, "/guestbook"):
h.guestbook.HandleRequest(w, req)
return
}
switch req.URL.Path {
@ -102,6 +110,16 @@ func main() {
Level: slog.LevelInfo,
}))
slog.SetDefault(logger)
// Setup DB
sqlitePath := os.Getenv("SQLITE_PATH")
if sqlitePath == "" {
panic("SQLITE_PATH environment variable must be set and non-empty")
}
db, err := sql.Open("sqlite3", sqlitePath)
if err != nil {
panic(err)
}
defer db.Close()
slog.Info("Starting gemini server")
var host, cert, key string
@ -112,11 +130,12 @@ func main() {
pbClient := pocketbase.NewPocketBaseClient()
handler := MainHandler{
blog: microblog.NewHandler(pbClient),
gemlog: gemlog.NewHandler(),
blog: microblog.NewHandler(pbClient),
gemlog: gemlog.NewHandler(),
guestbook: guestbook.NewGuestBook(db),
}
err := gemini.ListenAndServe(host, cert, key, gemini.TrapPanic(handler.ServeGemini))
err = gemini.ListenAndServe(host, cert, key, gemini.TrapPanic(handler.ServeGemini))
if err != nil {
slog.Error("server failed to start", "error", err)
os.Exit(1)