package main import ( // External "git.gibonuddevalla.se/go/html_template" // Standard "embed" "encoding/json" "fmt" "net/http" "os" "slices" "html/template" ) var ( htmlEngine HTMLTemplate.Engine //go:embed static staticFS embed.FS //go:embed views viewFS embed.FS ) func registerWebserverHandlers() { var err error htmlEngine, err = HTMLTemplate.NewEngine(viewFS, staticFS, flagDev) if err != nil { logger.Error("webserver", "error", err) os.Exit(1) } http.HandleFunc("/", rootHandler) } func startWebserver() { listen := fmt.Sprintf("%s:%d", config.Network.Address, config.Network.Port) logger.Info("webserver", "listen", listen) http.ListenAndServe(listen, nil) } func rootHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { page := HTMLTemplate.SimplePage{} page.Layout = "main" page.Page = "index" var err error data := make(map[string]any) data["Identity"], err = device.GetIdentity() if err != nil { w.Write([]byte(err.Error())) return } var entries []DNSRecord entries, err = device.StaticDNSEntries() if err != nil { w.Write([]byte(err.Error())) return } slices.SortFunc(entries, SortDNSRecord) data["DNSRecords"] = entries fmt.Printf("\n\x1b[32;1mSTART\x1b[0m\n") tree := BuildRecordsTree(entries) htmlTree := tree.ToHTML([]string{}) data["Tree"] = template.HTML(htmlTree) fmt.Printf("\n\x1b[32;1mDONE\x1b[0m\n") j, _ := json.Marshal(tree) os.WriteFile("/tmp/tree.json", j, 0644) data["VERSION"] = VERSION page.Data = data err = htmlEngine.Render(page, w, r) if err != nil { w.Write([]byte(err.Error())) return } return } htmlEngine.StaticResource(w, r) }