package http import ( "log/slog" stdhttp "net/http" ) // ui_sources.go — HTML form-driven source-group CRUD. Slice 1 of // P2R-02 lights the tab; slice 2 fills in list, new, edit, delete, // and per-group Run-now. type hostSourcesPage struct { hostChromeData } func (s *Server) handleUIHostSources(w stdhttp.ResponseWriter, r *stdhttp.Request) { u := s.requireUIUser(w, r) if u == nil { return } host, ok := s.loadHostForUI(w, r) if !ok { return } view := s.baseView(u, "dashboard") view.Title = host.Name + " sources · restic-manager" view.Page = hostSourcesPage{ hostChromeData: s.loadHostChrome(r, *host, "sources", "sources"), } if err := s.deps.UI.Render(w, "host_sources", view); err != nil { slog.Error("ui: render host_sources", "err", err) stdhttp.Error(w, "internal", stdhttp.StatusInternalServerError) } }