Add minimal Web UI server

This commit is contained in:
Andy Oknen 2025-07-29 20:14:41 +00:00
parent 707e90b1b3
commit 345d5b9cbd
13 changed files with 2058 additions and 0 deletions

63
src/webui/server.go Normal file
View file

@ -0,0 +1,63 @@
package webui
import (
"fmt"
"net/http"
"time"
"github.com/yggdrasil-network/yggdrasil-go/src/core"
)
type WebUIServer struct {
server *http.Server
log core.Logger
listen string
}
func Server(listen string, log core.Logger) *WebUIServer {
return &WebUIServer{
listen: listen,
log: log,
}
}
func (w *WebUIServer) Start() error {
mux := http.NewServeMux()
// Setup static files handler (implementation varies by build)
setupStaticHandler(mux)
// Serve any file by path (implementation varies by build)
mux.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
serveFile(rw, r, w.log)
})
// Health check endpoint
mux.HandleFunc("/health", func(rw http.ResponseWriter, r *http.Request) {
rw.WriteHeader(http.StatusOK)
rw.Write([]byte("OK"))
})
w.server = &http.Server{
Addr: w.listen,
Handler: mux,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
w.log.Infof("WebUI server starting on %s", w.listen)
if err := w.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
return fmt.Errorf("WebUI server failed: %v", err)
}
return nil
}
func (w *WebUIServer) Stop() error {
if w.server != nil {
return w.server.Close()
}
return nil
}