diff --git a/Dockerfile b/Dockerfile index 68d775a..f19925e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,10 +12,8 @@ COPY go.mod go.sum ./ # Download dependencies RUN go mod download -COPY ./*.go . +COPY main.go . COPY internal ./internal -COPY pages ./pages - # Enable CGO for go-sqlite3 ENV CGO_ENABLED=1 @@ -28,6 +26,7 @@ WORKDIR /app COPY --from=builder /app/main . COPY keys ./keys +COPY pages ./pages EXPOSE 8080 diff --git a/counter.go b/counter.go index 057c12a..fa432c3 100644 --- a/counter.go +++ b/counter.go @@ -2,7 +2,6 @@ package main import ( "encoding/json" - "errors" "log/slog" "os" "sync" @@ -19,13 +18,7 @@ type RequestCounter struct { } // NewRequestCounter creates a new request counter with periodic snapshots -func NewRequestCounter(snapshotInterval time.Duration) (*RequestCounter, error) { - snapshotPath := os.Getenv("REQUEST_COUNTS_PATH") - if snapshotPath == "" { - err := errors.New("REQUEST_COUNTS_PATH environment variable must be set and non-empty") - slog.Error("failed to initialize request counter", "error", err) - os.Exit(1) - } +func NewRequestCounter(snapshotPath string, snapshotInterval time.Duration) (*RequestCounter, error) { c := &RequestCounter{ counts: make(map[string]int64), snapshotPath: snapshotPath, diff --git a/internal/gemlog/gemlog.go b/internal/gemlog/gemlog.go index f4332c7..876fdf3 100644 --- a/internal/gemlog/gemlog.go +++ b/internal/gemlog/gemlog.go @@ -1,7 +1,6 @@ package gemlog import ( - _ "embed" "fmt" "log/slog" "os" @@ -52,14 +51,16 @@ func (g *Gemlog) HandleRequest(w gemini.ResponseWriter, req *gemini.Request) { } } -//go:embed gemlog.gmi -var pageContnet string - func (g *Gemlog) serveIndex(w gemini.ResponseWriter, req *gemini.Request) { w.WriteStatusMsg(gemini.StatusSuccess, "text/gemini") var content strings.Builder - content.Write([]byte(pageContnet)) + page, err := os.ReadFile("./pages/gemlog.gmi") + if err != nil { + slog.Error("Problem reading gemlog page", "error", err) + return + } + content.Write(page) content.WriteString("\n") posts, err := gemlog.ListGemLogs(g.config) diff --git a/internal/guestbook/guestbook.go b/internal/guestbook/guestbook.go index 786f89c..79448c7 100644 --- a/internal/guestbook/guestbook.go +++ b/internal/guestbook/guestbook.go @@ -4,10 +4,10 @@ import ( "crypto/sha256" "crypto/x509" "database/sql" - _ "embed" "encoding/hex" "fmt" "log/slog" + "os" "strings" "time" @@ -215,13 +215,15 @@ func censorString(s string) string { return string(masked) } -//go:embed guestbook.gmi -var pageContnet string - func (book *GuestBook) serveIndex(w gemini.ResponseWriter, req *gemini.Request) { w.WriteStatusMsg(gemini.StatusSuccess, "text/gemini") var content strings.Builder - content.Write([]byte(pageContnet)) + page, err := os.ReadFile("./pages/guestbook.gmi") + if err != nil { + slog.Error("Problem reading guestbook.gmi", "error", err) + return + } + content.Write(page) content.WriteString("\n") rows, err := book.db.Query("SELECT id, name, approved, created_at, message FROM guestbook ORDER BY created_at DESC") diff --git a/internal/microblog/microblog.go b/internal/microblog/microblog.go index b306515..7229613 100644 --- a/internal/microblog/microblog.go +++ b/internal/microblog/microblog.go @@ -1,11 +1,11 @@ package microblog import ( - _ "embed" "encoding/json" "fmt" "gemini_site/internal/pocketbase" "log/slog" + "os" "regexp" "strconv" "strings" @@ -216,9 +216,6 @@ func drawPost(builder *strings.Builder, p post) { // p.Timestamp.Format("2006-01-02 15:04"))) } -//go:embed microblog.gmi -var pageContnet string - // serveBlogIndex serves the main blog page with recent posts func (mb *MicroBlog) serveIndex(w gemini.ResponseWriter, req *gemini.Request, pageNum int) { w.WriteStatusMsg(gemini.StatusSuccess, "text/gemini") @@ -228,7 +225,12 @@ func (mb *MicroBlog) serveIndex(w gemini.ResponseWriter, req *gemini.Request, pa // content.WriteString("Here are my microblog posts from various plantforms\n") // Read and include the contents of ../../pages/microblog.gmi if pageNum == 1 { - content.Write([]byte(pageContnet)) + page, err := os.ReadFile("./pages/microblog.gmi") + if err != nil { + slog.Error("Problem reading microblog page", "error", err) + return + } + content.Write(page) content.WriteString("\n") } diff --git a/main.go b/main.go index c11bff1..5dad5fc 100644 --- a/main.go +++ b/main.go @@ -2,8 +2,6 @@ package main import ( "database/sql" - _ "embed" - "errors" "flag" "fmt" "log/slog" @@ -23,9 +21,6 @@ import ( gemini "github.com/kulak/gemini" ) -//go:embed home.gmi -var homePageContent string - type MainHandler struct { blog microblog.Handler gemlog gemlog.Handler @@ -63,8 +58,11 @@ func (h MainHandler) ServeGemini(w gemini.ResponseWriter, req *gemini.Request) { switch req.URL.Path { case "/": w.WriteStatusMsg(gemini.StatusSuccess, "text/gemini") + data, err := os.ReadFile("pages/home.gmi") + requireNoError(err) + page := string(data) var content strings.Builder - content.WriteString(homePageContent) + content.WriteString(page) content.WriteString(fmt.Sprintf("\n\n------ stats: total requests served %d, this page %d ------", h.counter.GetTotal(), h.counter.Get(req.URL.Path))) w.WriteBody([]byte(content.String())) // case "/user": @@ -143,13 +141,7 @@ func main() { flag.Parse() // Initialize request counter with 30-second snapshot interval - requestCountsPath := os.Getenv("REQUEST_COUNTS_PATH") - if requestCountsPath == "" { - err = errors.New("REQUEST_COUNTS_PATH environment variable must be set and non-empty") - slog.Error("failed to initialize request counter", "error", err) - os.Exit(1) - } - counter, err := NewRequestCounter(30 * time.Second) + counter, err := NewRequestCounter("request_counts.json", 30*time.Second) if err != nil { slog.Error("failed to initialize request counter", "error", err) os.Exit(1) diff --git a/internal/gemlog/gemlog.gmi b/pages/gemlog.gmi similarity index 100% rename from internal/gemlog/gemlog.gmi rename to pages/gemlog.gmi diff --git a/internal/guestbook/guestbook.gmi b/pages/guestbook.gmi similarity index 100% rename from internal/guestbook/guestbook.gmi rename to pages/guestbook.gmi diff --git a/home.gmi b/pages/home.gmi similarity index 100% rename from home.gmi rename to pages/home.gmi diff --git a/internal/microblog/microblog.gmi b/pages/microblog.gmi similarity index 100% rename from internal/microblog/microblog.gmi rename to pages/microblog.gmi diff --git a/tasks.txt b/tasks.txt deleted file mode 100644 index 2f80d77..0000000 --- a/tasks.txt +++ /dev/null @@ -1,5 +0,0 @@ -task: add hexidecimal numbering to gemlog - ------------DONE LINE----------- - -DONE task: add request counter