package api import ( "encoding/json" "log" "net/http" "vpnem/internal/rules" ) type Handler struct { store *rules.Store } func NewHandler(store *rules.Store) *Handler { return &Handler{store: store} } func (h *Handler) Servers(w http.ResponseWriter, r *http.Request) { servers, err := h.store.LoadServers() if err != nil { log.Printf("error loading servers: %v", err) http.Error(w, "internal error", http.StatusInternalServerError) return } writeJSON(w, servers) } func (h *Handler) RuleSetManifest(w http.ResponseWriter, r *http.Request) { manifest, err := h.store.LoadRuleSets() if err != nil { log.Printf("error loading rulesets: %v", err) http.Error(w, "internal error", http.StatusInternalServerError) return } writeJSON(w, manifest) } func (h *Handler) Version(w http.ResponseWriter, r *http.Request) { ver, err := h.store.LoadVersion() if err != nil { log.Printf("error loading version: %v", err) http.Error(w, "internal error", http.StatusInternalServerError) return } writeJSON(w, ver) } func writeJSON(w http.ResponseWriter, v any) { w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(v); err != nil { log.Printf("error encoding json: %v", err) } }