package main import ( "fmt" "html/template" "net/http" "os" "os/signal" "strconv" "strings" "syscall" "time" ) func getenv(k, d string) string { if v := os.Getenv(k); v != "" { return v } return d } func enabled(k string, def bool) bool { b, err := strconv.ParseBool(strings.ToLower(os.Getenv(k))) if err != nil { return def } return b } func cacheControl(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "public, max-age=31536000, immutable") next.ServeHTTP(w, r) }) } func main() { // Signal-Kanal einrichten stop := make(chan os.Signal, 1) signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM) // Goroutine, die auf Signale wartet go func() { <-stop fmt.Println("Stop Sign...") prepareExit() os.Exit(0) }() // --- Verzeichnisse konfigurierbar machen ------------------------- staticDir := getenv("BLOG_STATIC_DIR", "./static") templatesDir := getenv("BLOG_TEMPLATES_DIR", "./static/templates") /*storeEnabled := enabled("STORE_ENABLE", false)*/ /*TickCatalog = nil if err := LoadTickCatalog(ticksDir + "/ticks.json"); err != nil { fmt.Println("Fehler beim Laden:", err) } fmt.Println("Geladener Katalog:", TickCatalog) cloneRepo(gitRepo, gitBranch, gitDir)*/ funcs := template.FuncMap{ "now": time.Now, // jetzt‑Zeit bereitstellen } // Basislayout zuerst parsen layout := template.Must(template.New("base").Funcs(funcs).ParseFiles(templatesDir + "/base.html")) // LIST‑Seite: base + list.html /*tplList = template.Must(layout.Clone()) template.Must(tplList.Funcs(funcs).ParseFiles(templatesDir + "/list.html")) tplArticle = template.Must(layout.Clone()) template.Must(tplArticle.Funcs(funcs).ParseFiles(templatesDir + "/article.html")) tplPage := template.Must(layout.Clone()) template.Must(tplPage.ParseFiles(templatesDir + "/page.html"))*/ mux := http.NewServeMux() // Handler für / mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { layout.ExecuteTemplate(w, "layout", nil) }) mux.HandleFunc("/post/", func(w http.ResponseWriter, r *http.Request) { }) mux.HandleFunc("/page/", func(w http.ResponseWriter, r *http.Request) { }) mux.Handle("/static/", cacheControl(http.StripPrefix("/static/", http.FileServer(http.Dir(staticDir))))) mux.HandleFunc("/store", func(w http.ResponseWriter, r *http.Request) { }) StopServer(http.ListenAndServe(":8080", mux)) } func prepareExit() { fmt.Println("~", "Running exit tasks...") /*if err := SaveTickCatalog(getenv("BLOG_TICKS_DIR", "/ticks") + "/ticks.json"); err != nil { fmt.Println("Fehler beim Speichern:", err) } fmt.Println("Geladener Katalog:", TickCatalog)*/ fmt.Println("~", "Exit completed.") } func StopServer(e error) { fmt.Println("~", "Stopping server...") prepareExit() fmt.Println("~", "Server stopped!") }