From 5ba3de12d6ad68885ea31c5eb90bb33d3e1def9d Mon Sep 17 00:00:00 2001 From: taifu yuan <515789026@qq.com> Date: Wed, 9 Mar 2022 15:58:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BD=93=E5=89=8D=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=A4=9A=E7=AD=BE=E5=8F=AF=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=88=A0=E9=99=A4=E5=88=AB=E5=90=8D=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- certmgr/cert_alias_manage_contract.go | 86 +++++++++++++--------- certmgr/cert_alias_manage_contract_test.go | 4 +- certmgr/cert_manage_contract_test.go | 39 +++++++--- 3 files changed, 82 insertions(+), 47 deletions(-) diff --git a/certmgr/cert_alias_manage_contract.go b/certmgr/cert_alias_manage_contract.go index 1376293..5509677 100644 --- a/certmgr/cert_alias_manage_contract.go +++ b/certmgr/cert_alias_manage_contract.go @@ -123,17 +123,20 @@ func (r *CertManageRuntime) UpdateAlias(txSimContext protocol.TxSimContext, para return nil, err } - if txSimContext.GetSender().OrgId != certificate.Subject.Organization[0] { - return nil, fmt.Errorf("update alias fail, "+ - "you can't change other organization cert. "+ - "your org is %s cert org is %s", - txSimContext.GetSender().OrgId, certificate.Subject.Organization[0]) + if !containOrgId(txSimContext, certificate.Subject.Organization[0]) { + err = fmt.Errorf("update alias fail, "+ + "you can't change to other organization[%s] cert. ", + certificate.Subject.Organization[0]) + r.log.Warn(err) + return nil, err } - if txSimContext.GetSender().OrgId != nowCertificate.Subject.Organization[0] { - return nil, fmt.Errorf("update alias fail, "+ - "you can't change other organization cert. "+ - "your org is %s cert org is %s", - txSimContext.GetSender().OrgId, nowCertificate.Subject.Organization[0]) + + if !containOrgId(txSimContext, nowCertificate.Subject.Organization[0]) { + err = fmt.Errorf("update alias fail, "+ + "you can't change other organization[%s] cert. ", + certificate.Subject.Organization[0]) + r.log.Warn(err) + return nil, err } nowCert := &commonPb.AliasCertInfo{ @@ -177,7 +180,7 @@ func (r *CertManageRuntime) DeleteAlias(txSimContext protocol.TxSimContext, para names := string(params[paramNameAliases]) names = strings.TrimSpace(names) if utils.IsAnyBlank(names) { - err = fmt.Errorf("update alias failed, alias name is nil") + err = fmt.Errorf("delete alias failed, alias name is nil") r.log.Warn(err) return nil, err } @@ -198,16 +201,16 @@ func (r *CertManageRuntime) DeleteAlias(txSimContext protocol.TxSimContext, para // verify org certificate, err := utils.ParseCert(certAliasInfo.NowCert.Cert) if err != nil || certificate == nil || certificate.Subject.Organization == nil { - err = fmt.Errorf("update alias fail, params[%s] format error, err:%s", paramNameCert, err) + err = fmt.Errorf("delete alias fail, params[%s] format error, err:%s", paramNameCert, err) r.log.Warn(err) return nil, err } - - if txSimContext.GetSender().OrgId != certificate.Subject.Organization[0] { - return nil, fmt.Errorf("delete alias fail, "+ - "you can't change other organization cert. "+ - "your org is %s cert org is %s", - txSimContext.GetSender().OrgId, certificate.Subject.Organization[0]) + if !containOrgId(txSimContext, certificate.Subject.Organization[0]) { + err = fmt.Errorf("delete alias fail, "+ + "you can't delete other organization[%s] cert. ", + certificate.Subject.Organization[0]) + r.log.Warn(err) + return nil, err } blankCert := &commonPb.AliasCertInfo{BlockHeight: txSimContext.GetBlockHeight()} @@ -271,10 +274,10 @@ func (r *CertManageRuntime) addAliasCore(txSimContext protocol.TxSimContext, ali if certAliasInfo == nil { certAliasInfo = &commonPb.AliasInfo{Alias: aliasName} } - //err = r.saveAllAlias(txSimContext, aliasName) - //if err != nil { - // return err - //} + err = r.saveAllAlias(txSimContext, aliasName) + if err != nil { + return err + } certAliasInfo.NowCert = nowCert certAliasInfo.HisCerts = append(certAliasInfo.HisCerts, nowCert) err = r.setAliasToDb(txSimContext, certAliasInfo) @@ -285,20 +288,20 @@ func (r *CertManageRuntime) addAliasCore(txSimContext protocol.TxSimContext, ali return err } -//func (r *CertManageRuntime) saveAllAlias(txSimContext protocol.TxSimContext, aliasStr string) error { -// allAliasBytes, err := txSimContext.Get(certManageContractName, []byte(certAliasKey+"all")) -// if err != nil { -// r.log.Warnf("save all alias failed, err: ", err.Error()) -// return err -// } -// allAlias := string(allAliasBytes) -// if len(allAlias) > 0 { -// allAlias += "," -// } -// allAlias += aliasStr -// _ = txSimContext.Put(certManageContractName, []byte(certAliasKey+"all"), []byte(allAlias)) -// return nil -//} +func (r *CertManageRuntime) saveAllAlias(txSimContext protocol.TxSimContext, aliasStr string) error { + allAliasBytes, err := txSimContext.Get(certManageContractName, []byte(certAliasKey+"all")) + if err != nil { + r.log.Warnf("save all alias failed, err: ", err.Error()) + return err + } + allAlias := string(allAliasBytes) + if len(allAlias) > 0 { + allAlias += "," + } + allAlias += aliasStr + _ = txSimContext.Put(certManageContractName, []byte(certAliasKey+"all"), []byte(allAlias)) + return nil +} func (r *CertManageRuntime) setAliasToDb(txSimContext protocol.TxSimContext, certAliasInfo *commonPb.AliasInfo) error { certAliasBytes, err := certAliasInfo.Marshal() @@ -359,6 +362,17 @@ func (r *CertManageRuntime) setCertHash(txSimContext protocol.TxSimContext, nowC return nil } +func containOrgId(ctx protocol.TxSimContext, orgId string) bool { + endorses := ctx.GetTx().Endorsers + if len(endorses) == 0 { + return ctx.GetSender().OrgId == orgId + } + for _, endorse := range endorses { + return endorse.Signer.OrgId == orgId + } + return false +} + // Stay new function // //func (r *CertManageRuntime) FreezeAlias(txSimContext protocol.TxSimContext, params map[string][]byte) ( diff --git a/certmgr/cert_alias_manage_contract_test.go b/certmgr/cert_alias_manage_contract_test.go index 96e0ccb..6088207 100644 --- a/certmgr/cert_alias_manage_contract_test.go +++ b/certmgr/cert_alias_manage_contract_test.go @@ -125,7 +125,7 @@ func Test_DeleteAlias(t *testing.T) { // no alias add params := make(map[string][]byte) params[paramNameAliases] = []byte("alias03") - result, err = mgrRuntime.DeleteAlias(txSimContext, nil) + result, err = mgrRuntime.DeleteAlias(txSimContext, params) assert.NotNil(t, err) assert.Nil(t, result) @@ -152,7 +152,7 @@ func Test_DeleteAlias(t *testing.T) { assert.Nil(t, err) assert.Equal(t, "ok", string(result2)) - // dep delete + // repeat params[paramNameAliases] = []byte("alias03") params[paramNameCert] = getOrg1Client1Signer().MemberInfo result, err = mgrRuntime.DeleteAlias(txSimContext, params) diff --git a/certmgr/cert_manage_contract_test.go b/certmgr/cert_manage_contract_test.go index a222c15..3f72bd1 100644 --- a/certmgr/cert_manage_contract_test.go +++ b/certmgr/cert_manage_contract_test.go @@ -12,8 +12,9 @@ import ( "sync" "testing" - "chainmaker.org/chainmaker/pb-go/v2/accesscontrol" commonPb "chainmaker.org/chainmaker/pb-go/v2/common" + + "chainmaker.org/chainmaker/pb-go/v2/accesscontrol" "chainmaker.org/chainmaker/protocol/v2/test" "github.com/stretchr/testify/assert" @@ -64,6 +65,20 @@ var _ protocol.TxSimContext = (*mock.MockTxSimContext)(nil) func initEnv(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func()) { r, m, f := initEnvCore(t) m.EXPECT().GetSender().Return(getOrg1Client1Signer()).AnyTimes() + m.EXPECT().GetTx().DoAndReturn( + func() *commonPb.Transaction { + return &commonPb.Transaction{ + Sender: &commonPb.EndorsementEntry{ + Signer: getOrg1Client1Signer(), + }, + Endorsers: []*commonPb.EndorsementEntry{ + { + Signer: getOrg1Client1Signer(), + Signature: nil, + }, + }, + } + }).AnyTimes() return r, m, f } @@ -72,6 +87,20 @@ var cache = NewCacheMock() func initEnvSender2(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func()) { r, m, f := initEnvCore(t) m.EXPECT().GetSender().Return(getOrg2Client1Signer()).AnyTimes() + m.EXPECT().GetTx().DoAndReturn( + func() *commonPb.Transaction { + return &commonPb.Transaction{ + Sender: &commonPb.EndorsementEntry{ + Signer: getOrg1Client1Signer(), + }, + Endorsers: []*commonPb.EndorsementEntry{ + { + Signer: getOrg2Client1Signer(), + Signature: nil, + }, + }, + } + }).AnyTimes() return r, m, f } @@ -97,14 +126,6 @@ func initEnvCore(t *testing.T) (*CertManageRuntime, *mock.MockTxSimContext, func func(name string, key []byte) error { return cache.Del(name, string(key)) }).AnyTimes() - txSimContext.EXPECT().GetTx().DoAndReturn( - func() *commonPb.Transaction { - return &commonPb.Transaction{ - Sender: &commonPb.EndorsementEntry{ - Signer: getOrg1Client1Signer(), - }, - } - }).AnyTimes() txSimContext.EXPECT().GetBlockHeight().Return(uint64(1)).AnyTimes() return certMgrRuntime, txSimContext, func() { ctrl.Finish() } } -- GitLab