diff --git a/main.go b/main.go index 46a4c16..c58bd20 100644 --- a/main.go +++ b/main.go @@ -980,33 +980,40 @@ func (s *server) handleWhitelist(w http.ResponseWriter, r *http.Request) { return } var body struct { - Entry string `json:"ip"` // rückwärtskompatibel: Feld heißt weiter "ip" - // optional: "entry" wäre semantisch besser; hier bleiben wir kompatibel - } + IP string `json:"ip"` + } // GUI bleibt kompatibel if err := json.NewDecoder(r.Body).Decode(&body); err != nil { http.Error(w, "bad request", http.StatusBadRequest) return } - sRaw := strings.TrimSpace(body.Entry) + raw := strings.TrimSpace(body.IP) - // 1) Einzel-IP? - if addr, err := netip.ParseAddr(sRaw); err == nil { - if err := s.st.AddWhitelist(addr.Unmap()); err != nil { + // Fall 1: Einzel-IP + if addr, err := netip.ParseAddr(raw); err == nil { + addr = addr.Unmap() + if err := s.st.AddWhitelist(addr); err != nil { http.Error(w, "store error", http.StatusInternalServerError) return } - writeJSON(w, map[string]any{"status": "whitelisted_ip", "ip": addr.Unmap().String()}) + writeJSON(w, map[string]any{ + "status": "whitelisted_ip", + "ip": addr.String(), + }) return } - // 2) Prefix? - if norm, ok := normalizeLineToPrefix(sRaw); ok { + // Fall 2: Prefix (wir erlauben auch "8.8.8.8" → wird zu /32 normalisiert) + if norm, ok := normalizeLineToPrefix(raw); ok { if pfx, err := netip.ParsePrefix(norm); err == nil { + // wenn du Prefix-Whitelist hast: if err := s.st.AddWhitelistPrefix(pfx); err != nil { http.Error(w, "store error", http.StatusInternalServerError) return } - writeJSON(w, map[string]any{"status": "whitelisted_prefix", "prefix": pfx.String()}) + writeJSON(w, map[string]any{ + "status": "whitelisted_prefix", + "prefix": pfx.String(), + }) return } }