package main
import (
"context"
"errors"
"html/template"
"log"
"net/http"
"os"
"os/signal"
"sophuwu.site/myweb/config"
)
var Tplt *template.Template
func ParseTemplates() {
Tplt = template.Must(template.ParseGlob(config.Templates))
}
func HttpIndex(w http.ResponseWriter, r *http.Request) {
data := make(map[string]string)
data["Title"] = config.Name
data["Description"] = "Blogs and projects by " + config.Name + "."
data["Url"] = config.URL + r.URL.Path
data["Email"] = config.Email
data["Name"] = config.Name
if err := Tplt.ExecuteTemplate(w, "index", data); err != nil {
log.Println(err)
return
}
}
func HttpFS(path, fspath string) {
http.Handle(path, http.StripPrefix(path, http.FileServer(http.Dir(fspath))))
}
func main() {
ParseTemplates()
http.HandleFunc("/", HttpIndex)
HttpFS("/static/", config.StaticPath)
HttpFS("/media/", config.MediaPath)
server := http.Server{Addr: config.ListenAddr, Handler: nil}
go func() {
err := server.ListenAndServe()
if err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatalf("Error starting server: %v", err)
}
}()
sigchan := make(chan os.Signal)
signal.Notify(sigchan)
s := <-sigchan
println("stopping: got signal", s.String())
server.Shutdown(context.Background())
println("stopped")
}