@@ -78,15 +78,17 @@ func (h *Handler) getPeer(ctx context.Context, accountID, peerID, userID string,
7878 grps , _ := h .accountManager .GetPeerGroups (ctx , accountID , peerID )
7979 grpsInfoMap := groups .ToGroupsInfoMap (grps , 0 )
8080
81- validPeers , err := h .accountManager .GetValidatedPeers (ctx , accountID )
81+ validPeers , invalidPeers , err := h .accountManager .GetValidatedPeers (ctx , accountID )
8282 if err != nil {
8383 log .WithContext (ctx ).Errorf ("failed to list approved peers: %v" , err )
8484 util .WriteError (ctx , fmt .Errorf ("internal error" ), w )
8585 return
8686 }
8787
8888 _ , valid := validPeers [peer .ID ]
89- util .WriteJSONObject (ctx , w , toSinglePeerResponse (peerToReturn , grpsInfoMap [peerID ], dnsDomain , valid ))
89+ reason := invalidPeers [peer .ID ]
90+
91+ util .WriteJSONObject (ctx , w , toSinglePeerResponse (peerToReturn , grpsInfoMap [peerID ], dnsDomain , valid , reason ))
9092}
9193
9294func (h * Handler ) updatePeer (ctx context.Context , accountID , userID , peerID string , w http.ResponseWriter , r * http.Request ) {
@@ -147,16 +149,17 @@ func (h *Handler) updatePeer(ctx context.Context, accountID, userID, peerID stri
147149
148150 grpsInfoMap := groups .ToGroupsInfoMap (peerGroups , 0 )
149151
150- validPeers , err := h .accountManager .GetValidatedPeers (ctx , accountID )
152+ validPeers , invalidPeers , err := h .accountManager .GetValidatedPeers (ctx , accountID )
151153 if err != nil {
152- log .WithContext (ctx ).Errorf ("failed to list appreoved peers: %v" , err )
154+ log .WithContext (ctx ).Errorf ("failed to get validated peers: %v" , err )
153155 util .WriteError (ctx , fmt .Errorf ("internal error" ), w )
154156 return
155157 }
156158
157159 _ , valid := validPeers [peer .ID ]
160+ reason := invalidPeers [peer .ID ]
158161
159- util .WriteJSONObject (r .Context (), w , toSinglePeerResponse (peer , grpsInfoMap [peerID ], dnsDomain , valid ))
162+ util .WriteJSONObject (r .Context (), w , toSinglePeerResponse (peer , grpsInfoMap [peerID ], dnsDomain , valid , reason ))
160163}
161164
162165func (h * Handler ) deletePeer (ctx context.Context , accountID , userID string , peerID string , w http.ResponseWriter ) {
@@ -240,22 +243,25 @@ func (h *Handler) GetAllPeers(w http.ResponseWriter, r *http.Request) {
240243 respBody = append (respBody , toPeerListItemResponse (peerToReturn , grpsInfoMap [peer .ID ], dnsDomain , 0 ))
241244 }
242245
243- validPeersMap , err := h .accountManager .GetValidatedPeers (r .Context (), accountID )
246+ validPeersMap , invalidPeersMap , err := h .accountManager .GetValidatedPeers (r .Context (), accountID )
244247 if err != nil {
245- log .WithContext (r .Context ()).Errorf ("failed to list appreoved peers: %v" , err )
248+ log .WithContext (r .Context ()).Errorf ("failed to get validated peers: %v" , err )
246249 util .WriteError (r .Context (), fmt .Errorf ("internal error" ), w )
247250 return
248251 }
249- h .setApprovalRequiredFlag (respBody , validPeersMap )
252+ h .setApprovalRequiredFlag (respBody , validPeersMap , invalidPeersMap )
250253
251254 util .WriteJSONObject (r .Context (), w , respBody )
252255}
253256
254- func (h * Handler ) setApprovalRequiredFlag (respBody []* api.PeerBatch , approvedPeersMap map [string ]struct {}) {
257+ func (h * Handler ) setApprovalRequiredFlag (respBody []* api.PeerBatch , validPeersMap map [string ]struct {}, invalidPeersMap map [ string ] string ) {
255258 for _ , peer := range respBody {
256- _ , ok := approvedPeersMap [peer .Id ]
259+ _ , ok := validPeersMap [peer .Id ]
257260 if ! ok {
258261 peer .ApprovalRequired = true
262+
263+ reason := invalidPeersMap [peer .Id ]
264+ peer .DisapprovalReason = & reason
259265 }
260266 }
261267}
@@ -304,7 +310,7 @@ func (h *Handler) GetAccessiblePeers(w http.ResponseWriter, r *http.Request) {
304310 }
305311 }
306312
307- validPeers , err := h .accountManager .GetValidatedPeers (r .Context (), accountID )
313+ validPeers , _ , err := h .accountManager .GetValidatedPeers (r .Context (), accountID )
308314 if err != nil {
309315 log .WithContext (r .Context ()).Errorf ("failed to list approved peers: %v" , err )
310316 util .WriteError (r .Context (), fmt .Errorf ("internal error" ), w )
@@ -430,13 +436,13 @@ func peerToAccessiblePeer(peer *nbpeer.Peer, dnsDomain string) api.AccessiblePee
430436 }
431437}
432438
433- func toSinglePeerResponse (peer * nbpeer.Peer , groupsInfo []api.GroupMinimum , dnsDomain string , approved bool ) * api.Peer {
439+ func toSinglePeerResponse (peer * nbpeer.Peer , groupsInfo []api.GroupMinimum , dnsDomain string , approved bool , reason string ) * api.Peer {
434440 osVersion := peer .Meta .OSVersion
435441 if osVersion == "" {
436442 osVersion = peer .Meta .Core
437443 }
438444
439- return & api.Peer {
445+ apiPeer := & api.Peer {
440446 CreatedAt : peer .CreatedAt ,
441447 Id : peer .ID ,
442448 Name : peer .Name ,
@@ -465,6 +471,12 @@ func toSinglePeerResponse(peer *nbpeer.Peer, groupsInfo []api.GroupMinimum, dnsD
465471 InactivityExpirationEnabled : peer .InactivityExpirationEnabled ,
466472 Ephemeral : peer .Ephemeral ,
467473 }
474+
475+ if ! approved {
476+ apiPeer .DisapprovalReason = & reason
477+ }
478+
479+ return apiPeer
468480}
469481
470482func toPeerListItemResponse (peer * nbpeer.Peer , groupsInfo []api.GroupMinimum , dnsDomain string , accessiblePeersCount int ) * api.PeerBatch {
0 commit comments