forked from OpenBazaar/openbazaar-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ban_manager.go
64 lines (54 loc) · 1.24 KB
/
ban_manager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package net
import (
peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
"sync"
)
type BanManager struct {
blockedIds map[string]bool
*sync.RWMutex
}
func NewBanManager(blockedIds []peer.ID) *BanManager {
blockedMap := make(map[string]bool)
for _, pid := range blockedIds {
blockedMap[pid.Pretty()] = true
}
return &BanManager{blockedMap, new(sync.RWMutex)}
}
func (bm *BanManager) AddBlockedId(peerId peer.ID) {
bm.Lock()
defer bm.Unlock()
bm.blockedIds[peerId.Pretty()] = true
}
func (bm *BanManager) RemoveBlockedId(peerId peer.ID) {
bm.Lock()
defer bm.Unlock()
if bm.blockedIds[peerId.Pretty()] {
delete(bm.blockedIds, peerId.Pretty())
}
}
func (bm *BanManager) SetBlockedIds(peerIds []peer.ID) {
bm.Lock()
defer bm.Unlock()
bm.blockedIds = make(map[string]bool)
for _, pid := range peerIds {
bm.blockedIds[pid.Pretty()] = true
}
}
func (bm *BanManager) GetBlockedIds() []peer.ID {
bm.RLock()
defer bm.RUnlock()
var ret []peer.ID
for pid := range bm.blockedIds {
id, err := peer.IDB58Decode(pid)
if err != nil {
continue
}
ret = append(ret, id)
}
return ret
}
func (bm *BanManager) IsBanned(peerId peer.ID) bool {
bm.RLock()
defer bm.RUnlock()
return bm.blockedIds[peerId.Pretty()]
}