diff --git a/core/api.go b/core/api.go index db88168..b59e6de 100644 --- a/core/api.go +++ b/core/api.go @@ -161,8 +161,14 @@ func (caller apiCaller) uploadAPI(w http.ResponseWriter, r *http.Request) error func (caller apiCaller) blockAPI(w http.ResponseWriter, r *http.Request) error { mg := caller.mg if r.Method == "GET" { - enc := json.NewEncoder(w) - enc.Encode(mg.bl.all()) + target, ok := gocommon.ReadObjectIDFormValue(r.Form, "accid") + if ok { + json.NewEncoder(w).Encode(mg.bl.all()) + } else if !target.IsZero() { + if blocked, ok := mg.bl.get(target); ok && blocked != nil { + json.NewEncoder(w).Encode(blocked) + } + } } else if r.Method == "PUT" { body, _ := io.ReadAll(r.Body) diff --git a/core/member_container.go b/core/member_container.go index 2c4eaa4..7259ce8 100644 --- a/core/member_container.go +++ b/core/member_container.go @@ -42,6 +42,14 @@ func (p *memberContainerPtr[K, T]) add(m T) { atomic.StorePointer(&p.ptr, unsafe.Pointer(&next)) } +func (p *memberContainerPtr[K, T]) get(key K) (T, bool) { + ptr := atomic.LoadPointer(&p.ptr) + src := (*map[K]T)(ptr) + + out, found := (*src)[key] + return out, found +} + func (p *memberContainerPtr[K, T]) remove(key K) { ptr := atomic.LoadPointer(&p.ptr) src := (*map[K]T)(ptr)