@@ -284,14 +284,18 @@ func (s *server) findPeers(w http.ResponseWriter, r *http.Request) {
284284 return
285285 }
286286
287+ query := r .URL .Query ()
288+ filterAddrs := parseFilter (query .Get ("filter-addrs" ))
289+ filterProtocols := parseFilter (query .Get ("filter-protocols" ))
290+
287291 mediaType , err := s .detectResponseType (r )
288292 if err != nil {
289293 writeErr (w , "FindPeers" , http .StatusBadRequest , err )
290294 return
291295 }
292296
293297 var (
294- handlerFunc func (w http.ResponseWriter , provIter iter.ResultIter [* types.PeerRecord ])
298+ handlerFunc func (w http.ResponseWriter , provIter iter.ResultIter [* types.PeerRecord ], filterAddrs , filterProtocols [] string )
295299 recordsLimit int
296300 )
297301
@@ -314,7 +318,7 @@ func (s *server) findPeers(w http.ResponseWriter, r *http.Request) {
314318 }
315319 }
316320
317- handlerFunc (w , provIter )
321+ handlerFunc (w , provIter , filterAddrs , filterProtocols )
318322}
319323
320324func (s * server ) provide (w http.ResponseWriter , httpReq * http.Request ) {
@@ -376,10 +380,21 @@ func (s *server) provide(w http.ResponseWriter, httpReq *http.Request) {
376380 writeJSONResult (w , "Provide" , resp )
377381}
378382
379- func (s * server ) findPeersJSON (w http.ResponseWriter , peersIter iter.ResultIter [* types.PeerRecord ]) {
383+ func (s * server ) findPeersJSON (w http.ResponseWriter , peersIter iter.ResultIter [* types.PeerRecord ], filterAddrs , filterProtocols [] string ) {
380384 defer peersIter .Close ()
381385
382- peers , err := iter .ReadAllResults (peersIter )
386+ // Convert PeerRecord to Record so that we can reuse the filtering logic from findProviders
387+ mappedIter := iter .Map (peersIter , func (v iter.Result [* types.PeerRecord ]) iter.Result [types.Record ] {
388+ if v .Err != nil || v .Val == nil {
389+ return iter.Result [types.Record ]{Err : v .Err }
390+ }
391+
392+ var record types.Record = v .Val
393+ return iter.Result [types.Record ]{Val : record }
394+ })
395+
396+ filteredIter := applyFiltersToIter (mappedIter , filterAddrs , filterProtocols )
397+ peers , err := iter .ReadAllResults (filteredIter )
383398 if err != nil {
384399 writeErr (w , "FindPeers" , http .StatusInternalServerError , fmt .Errorf ("delegate error: %w" , err ))
385400 return
@@ -390,8 +405,19 @@ func (s *server) findPeersJSON(w http.ResponseWriter, peersIter iter.ResultIter[
390405 })
391406}
392407
393- func (s * server ) findPeersNDJSON (w http.ResponseWriter , peersIter iter.ResultIter [* types.PeerRecord ]) {
394- writeResultsIterNDJSON (w , peersIter )
408+ func (s * server ) findPeersNDJSON (w http.ResponseWriter , peersIter iter.ResultIter [* types.PeerRecord ], filterAddrs , filterProtocols []string ) {
409+ // Convert PeerRecord to Record so that we can reuse the filtering logic from findProviders
410+ mappedIter := iter .Map (peersIter , func (v iter.Result [* types.PeerRecord ]) iter.Result [types.Record ] {
411+ if v .Err != nil || v .Val == nil {
412+ return iter.Result [types.Record ]{Err : v .Err }
413+ }
414+
415+ var record types.Record = v .Val
416+ return iter.Result [types.Record ]{Val : record }
417+ })
418+
419+ filteredIter := applyFiltersToIter (mappedIter , filterAddrs , filterProtocols )
420+ writeResultsIterNDJSON (w , filteredIter )
395421}
396422
397423func (s * server ) GetIPNS (w http.ResponseWriter , r * http.Request ) {
0 commit comments