routeros_dns/webserver.go
2026-02-24 17:21:55 +01:00

97 lines
1.7 KiB
Go

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
/*
tree := BuildRecordsTree(entries)
htmlElements := tree.ToHTMLElements([]string{})
data["TreeData"] = tree
var html string
for _, el := range htmlElements {
html += el.HTML
}
data["Tree"] = template.HTML(html)
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)
}