From fea0ef77c8c98dfadd2f9d29804653293fd31c99 Mon Sep 17 00:00:00 2001 From: a73x Date: Sun, 25 Aug 2024 15:14:41 +0100 Subject: feat: add templating --- cmd/generate/main.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ cmd/home/main.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 cmd/generate/main.go create mode 100644 cmd/home/main.go (limited to 'cmd') diff --git a/cmd/generate/main.go b/cmd/generate/main.go new file mode 100644 index 0000000..a739fea --- /dev/null +++ b/cmd/generate/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + "log" + "os" + "path/filepath" + "text/template" +) + +func Run() error { + t, err := template.ParseGlob("./templates/layouts/*.html") + // t, err := template.ParseFiles("index.html", "header.html") + if err != nil { + return fmt.Errorf("Failed to parse layouts: %v", err) + } + + for _, page := range []string{"index.html", "posts.html"} { + file, err := os.Create(filepath.Join("public", page)) + if err != nil { + return fmt.Errorf("Failed to create file: %v", err) + } + + defer file.Close() + + foo, err := t.ParseFiles("./templates/" + page) + if err != nil { + return fmt.Errorf("Parse template file: %v", err) + } + + err = foo.ExecuteTemplate(file, "index.html", nil) + if err != nil { + return fmt.Errorf("Failed to generate file: %v", err) + } + } + + return nil + +} +func main() { + if err := Run(); err != nil { + log.Fatal(err) + } +} diff --git a/cmd/home/main.go b/cmd/home/main.go new file mode 100644 index 0000000..f284c30 --- /dev/null +++ b/cmd/home/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "io/fs" + "log" + "net/http" + "time" + + "git.sr.ht/~a73x/home" + "go.uber.org/zap" +) + +func main() { + logger, _ := zap.NewProduction() + loggingMiddleware := func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + next.ServeHTTP(w, r) + logger.Info("request received", + zap.String("url", r.URL.Path), + zap.String("method", r.Method), + zap.Duration("duration", time.Since(start)), + zap.String("user-agent", r.UserAgent()), + ) + }) + } + + mux := http.NewServeMux() + + staticFs, err := fs.Sub(home.Content, "public") + if err != nil { + log.Fatal(err) + } + + mux.Handle("GET /", http.FileServer(http.FS(staticFs))) + + server := http.Server{ + Addr: ":8080", + Handler: loggingMiddleware(mux), + } + + err = server.ListenAndServe() + if err != nil { + log.Fatal(err) + } +} -- cgit v1.2.3