Compare commits

...

3 Commits

Author SHA1 Message Date
Sergey Cherepanov
940ad7d657
fix log 2023-07-18 20:55:07 +02:00
Sergey Cherepanov
92d6ce1b3c
coordinatorclient: validate network id 2023-07-17 19:30:12 +02:00
Sergey Cherepanov
27adabf1b9
dial: validate peer id 2023-07-17 19:29:40 +02:00
2 changed files with 24 additions and 2 deletions

View File

@ -3,9 +3,11 @@ package coordinatorclient
import ( import (
"context" "context"
"errors"
"github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app"
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
"github.com/anyproto/any-sync/coordinator/coordinatorproto" "github.com/anyproto/any-sync/coordinator/coordinatorproto"
"github.com/anyproto/any-sync/net/peer"
"github.com/anyproto/any-sync/net/pool" "github.com/anyproto/any-sync/net/pool"
"github.com/anyproto/any-sync/net/rpc/rpcerr" "github.com/anyproto/any-sync/net/rpc/rpcerr"
"github.com/anyproto/any-sync/nodeconf" "github.com/anyproto/any-sync/nodeconf"
@ -15,6 +17,11 @@ import (
const CName = "common.coordinator.coordinatorclient" const CName = "common.coordinator.coordinatorclient"
var (
ErrPubKeyMissing = errors.New("peer pub key missing")
ErrNetworkMismatched = errors.New("network mismatched")
)
func New() CoordinatorClient { func New() CoordinatorClient {
return new(coordinatorClient) return new(coordinatorClient)
} }
@ -145,6 +152,13 @@ func (c *coordinatorClient) doClient(ctx context.Context, f func(cl coordinatorp
if err != nil { if err != nil {
return err return err
} }
pubKey, err := peer.CtxPubKey(p.Context())
if err != nil {
return ErrPubKeyMissing
}
if pubKey.Network() != c.nodeConf.Configuration().NetworkId {
return ErrNetworkMismatched
}
return p.DoDrpc(ctx, func(conn drpc.Conn) error { return p.DoDrpc(ctx, func(conn drpc.Conn) error {
return f(coordinatorproto.NewDRPCCoordinatorClient(conn)) return f(coordinatorproto.NewDRPCCoordinatorClient(conn))
}) })

View File

@ -21,6 +21,7 @@ var log = logger.NewNamed(CName)
var ( var (
ErrAddrsNotFound = errors.New("addrs for peer not found") ErrAddrsNotFound = errors.New("addrs for peer not found")
ErrPeerIdMismatched = errors.New("peerId mismatched")
) )
func New() PeerService { func New() PeerService {
@ -67,7 +68,7 @@ func (p *peerService) Dial(ctx context.Context, peerId string) (pr peer.Peer, er
} }
var mc transport.MultiConn var mc transport.MultiConn
log.InfoCtx(ctx, "dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs)) log.DebugCtx(ctx, "dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs))
for _, addr := range addrs { for _, addr := range addrs {
mc, err = p.yamux.Dial(ctx, addr) mc, err = p.yamux.Dial(ctx, addr)
if err != nil { if err != nil {
@ -79,6 +80,13 @@ func (p *peerService) Dial(ctx context.Context, peerId string) (pr peer.Peer, er
if err != nil { if err != nil {
return return
} }
connPeerId, err := peer.CtxPeerId(mc.Context())
if err != nil {
return nil, err
}
if connPeerId != peerId {
return nil, ErrPeerIdMismatched
}
return peer.NewPeer(mc, p.server) return peer.NewPeer(mc, p.server)
} }