9 cfg "github.com/vapor/config"
10 dbm "github.com/vapor/database/leveldb"
14 defaultBanDuration = time.Hour * 1
15 blacklistKey = "BlacklistPeers"
19 ErrConnectBannedPeer = errors.New("connect banned peer")
22 type Blacklist struct {
23 peers map[string]time.Time
29 func NewBlacklist(config *cfg.Config) *Blacklist {
31 peers: make(map[string]time.Time),
32 db: dbm.NewDB("blacklist", config.DBBackend, config.DBDir()),
36 //AddPeer add peer to blacklist
37 func (bl *Blacklist) AddPeer(ip string) error {
41 bl.peers[ip] = time.Now().Add(defaultBanDuration)
42 dataJSON, err := json.Marshal(bl.peers)
47 bl.db.Set([]byte(blacklistKey), dataJSON)
51 func (bl *Blacklist) delPeer(ip string) error {
53 dataJson, err := json.Marshal(bl.peers)
58 bl.db.Set([]byte(blacklistKey), dataJson)
62 func (bl *Blacklist) DoFilter(ip string, pubKey string) error {
66 if banEnd, ok := bl.peers[ip]; ok {
67 if time.Now().Before(banEnd) {
68 return ErrConnectBannedPeer
71 if err := bl.delPeer(ip); err != nil {
79 // LoadPeers load banned peers from db
80 func (bl *Blacklist) LoadPeers() error {
84 if dataJSON := bl.db.Get([]byte(blacklistKey)); dataJSON != nil {
85 if err := json.Unmarshal(dataJSON, &bl.peers); err != nil {