package httpapi import ( "errors" "net/http" "strings" "evobgp/internal/lookup" "evobgp/internal/store" ) // handleLookup implements GET /v1/lookup?q= (operationId: lookupMembership). func (s *Server) handleLookup(w http.ResponseWriter, r *http.Request) { a, ok := authFromContext(r.Context()) if !ok { writeProblem(w, http.StatusUnauthorized, "Unauthorized", "missing auth") return } if !s.requirePerm(w, a, "bgp:lookup:read") { return } q := strings.TrimSpace(r.URL.Query().Get("q")) if q == "" { writeProblem(w, http.StatusBadRequest, "Bad Request", "query parameter q is required") return } res, err := lookup.Lookup(r.Context(), s.store, a.TenantID, q) if err != nil { if errors.Is(err, store.ErrInvalidInput) { writeProblem(w, http.StatusBadRequest, "Bad Request", "query must be an IP address, CIDR, or FQDN") return } writeStoreErr(w, err) return } writeJSON(w, http.StatusOK, res) }