From d3c9393e0e14269ee97f3c546d44fcca7d064e5b Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Tue, 21 Feb 2023 16:35:43 +0800 Subject: [PATCH 1/2] fix: resolve address before check permission --- api/messager_impl.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/api/messager_impl.go b/api/messager_impl.go index 9b08f782..c6ff0280 100644 --- a/api/messager_impl.go +++ b/api/messager_impl.go @@ -13,6 +13,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/venus-messager/publisher/pubsub" + v1 "github.com/filecoin-project/venus/venus-shared/api/chain/v1" "github.com/filecoin-project/venus/venus-shared/api/messager" venusTypes "github.com/filecoin-project/venus/venus-shared/types" types "github.com/filecoin-project/venus/venus-shared/types/messager" @@ -32,6 +33,7 @@ type ImplParams struct { SharedParamsService *service.SharedParamsService Net pubsub.INet AuthClient jwtclient.IAuthClient + NodeClient v1.FullNode } func NewMessageImp(implParams ImplParams) *MessageImp { @@ -42,6 +44,7 @@ func NewMessageImp(implParams ImplParams) *MessageImp { ParamsSrv: implParams.SharedParamsService, Net: implParams.Net, AuthClient: implParams.AuthClient, + NodeClient: implParams.NodeClient, } } @@ -52,6 +55,7 @@ type MessageImp struct { ParamsSrv *service.SharedParamsService Net pubsub.INet AuthClient jwtclient.IAuthClient + NodeClient v1.FullNode } var _ messager.IMessager = (*MessageImp)(nil) @@ -72,13 +76,21 @@ func (m MessageImp) WaitMessage(ctx context.Context, id string, confidence uint6 } func (m MessageImp) PushMessage(ctx context.Context, msg *venusTypes.Message, meta *types.SendSpec) (string, error) { - if err := jwtclient.CheckPermissionBySigner(ctx, m.AuthClient, msg.From); err != nil { - return "", err - } - return m.MessageSrv.PushMessage(ctx, msg, meta) + id := venusTypes.NewUUID().String() + return m.MessageSrv.PushMessageWithId(ctx, id, msg, meta) } func (m MessageImp) PushMessageWithId(ctx context.Context, id string, msg *venusTypes.Message, meta *types.SendSpec) (string, error) { + // replace address + if msg.From.Protocol() == address.ID { + fromA, err := m.NodeClient.StateAccountKey(ctx, msg.From, venusTypes.EmptyTSK) + if err != nil { + return "", fmt.Errorf("getting key address %s failed: %w", msg.From, err) + } + log.Warnf("Push from ID address (%s), adjusting to %s", msg.From, fromA) + msg.From = fromA + } + if err := jwtclient.CheckPermissionBySigner(ctx, m.AuthClient, msg.From); err != nil { return "", err } From 3d88ea3787e76be15132a617ad198690a638b38b Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:33:45 +0800 Subject: [PATCH 2/2] chore: fix test --- api/messager_impl.go | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/api/messager_impl.go b/api/messager_impl.go index c6ff0280..4e012ab9 100644 --- a/api/messager_impl.go +++ b/api/messager_impl.go @@ -75,22 +75,38 @@ func (m MessageImp) WaitMessage(ctx context.Context, id string, confidence uint6 return m.MessageSrv.WaitMessage(ctx, id, confidence) } +func (m MessageImp) resolveAddress(ctx context.Context, addr address.Address) (address.Address, error) { + if addr.Protocol() == address.ID { + addrTmp, err := m.NodeClient.StateAccountKey(ctx, addr, venusTypes.EmptyTSK) + if err != nil { + return address.Undef, fmt.Errorf("getting key address %s failed: %w", addr, err) + } + log.Infof("Push from ID address (%s), adjusting to %s", addr, addrTmp) + + addr = addrTmp + } + + return addr, nil +} + func (m MessageImp) PushMessage(ctx context.Context, msg *venusTypes.Message, meta *types.SendSpec) (string, error) { - id := venusTypes.NewUUID().String() - return m.MessageSrv.PushMessageWithId(ctx, id, msg, meta) + var err error + msg.From, err = m.resolveAddress(ctx, msg.From) + if err != nil { + return "", err + } + if err := jwtclient.CheckPermissionBySigner(ctx, m.AuthClient, msg.From); err != nil { + return "", err + } + return m.MessageSrv.PushMessage(ctx, msg, meta) } func (m MessageImp) PushMessageWithId(ctx context.Context, id string, msg *venusTypes.Message, meta *types.SendSpec) (string, error) { - // replace address - if msg.From.Protocol() == address.ID { - fromA, err := m.NodeClient.StateAccountKey(ctx, msg.From, venusTypes.EmptyTSK) - if err != nil { - return "", fmt.Errorf("getting key address %s failed: %w", msg.From, err) - } - log.Warnf("Push from ID address (%s), adjusting to %s", msg.From, fromA) - msg.From = fromA + var err error + msg.From, err = m.resolveAddress(ctx, msg.From) + if err != nil { + return "", err } - if err := jwtclient.CheckPermissionBySigner(ctx, m.AuthClient, msg.From); err != nil { return "", err }