92 lines
2.2 KiB
Go
92 lines
2.2 KiB
Go
package common
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
|
)
|
|
|
|
func (a *CommonAPI) NetBlockAdd(ctx context.Context, acl dtypes.NetBlockList) error {
|
|
for _, p := range acl.Peers {
|
|
err := a.ConnGater.BlockPeer(p)
|
|
if err != nil {
|
|
return xerrors.Errorf("error blocking peer %s: %w", p, err)
|
|
}
|
|
}
|
|
|
|
for _, addr := range acl.IPAddrs {
|
|
ip := net.ParseIP(addr)
|
|
if ip == nil {
|
|
return xerrors.Errorf("error parsing IP address %s", addr)
|
|
}
|
|
|
|
err := a.ConnGater.BlockAddr(ip)
|
|
if err != nil {
|
|
return xerrors.Errorf("error blocking IP address %s: %w", addr, err)
|
|
}
|
|
}
|
|
|
|
for _, subnet := range acl.IPSubnets {
|
|
_, cidr, err := net.ParseCIDR(subnet)
|
|
if err != nil {
|
|
return xerrors.Errorf("error parsing subnet %s: %w", subnet, err)
|
|
}
|
|
|
|
err = a.ConnGater.BlockSubnet(cidr)
|
|
if err != nil {
|
|
return xerrors.Errorf("error blocking subunet %s: %w", subnet, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a *CommonAPI) NetBlockRemove(ctx context.Context, acl dtypes.NetBlockList) error {
|
|
for _, p := range acl.Peers {
|
|
err := a.ConnGater.UnblockPeer(p)
|
|
if err != nil {
|
|
return xerrors.Errorf("error unblocking peer %s: %w", p, err)
|
|
}
|
|
}
|
|
|
|
for _, addr := range acl.IPAddrs {
|
|
ip := net.ParseIP(addr)
|
|
if ip == nil {
|
|
return xerrors.Errorf("error parsing IP address %s", addr)
|
|
}
|
|
|
|
err := a.ConnGater.UnblockAddr(ip)
|
|
if err != nil {
|
|
return xerrors.Errorf("error unblocking IP address %s: %w", addr, err)
|
|
}
|
|
}
|
|
|
|
for _, subnet := range acl.IPSubnets {
|
|
_, cidr, err := net.ParseCIDR(subnet)
|
|
if err != nil {
|
|
return xerrors.Errorf("error parsing subnet %s: %w", subnet, err)
|
|
}
|
|
|
|
err = a.ConnGater.UnblockSubnet(cidr)
|
|
if err != nil {
|
|
return xerrors.Errorf("error unblocking subunet %s: %w", subnet, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a *CommonAPI) NetBlockList(ctx context.Context) (result dtypes.NetBlockList, err error) {
|
|
result.Peers = a.ConnGater.ListBlockedPeers()
|
|
for _, ip := range a.ConnGater.ListBlockedAddrs() {
|
|
result.IPAddrs = append(result.IPAddrs, ip.String())
|
|
}
|
|
for _, subnet := range a.ConnGater.ListBlockedSubnets() {
|
|
result.IPSubnets = append(result.IPSubnets, subnet.String())
|
|
}
|
|
return
|
|
}
|