add guestbook
This commit is contained in:
parent
78ae49c2c7
commit
0bd065c2d1
7 changed files with 333 additions and 14 deletions
35
main.go
35
main.go
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue