github.com/sykesm/fabric@v1.1.0-preview.0.20200129034918-2aa12b1a0181/core/common/privdata/membershipinfo.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package privdata
     8  
     9  import (
    10  	"github.com/hyperledger/fabric-protos-go/peer"
    11  	"github.com/hyperledger/fabric/common/flogging"
    12  	"github.com/hyperledger/fabric/msp"
    13  	"github.com/hyperledger/fabric/protoutil"
    14  )
    15  
    16  var logger = flogging.MustGetLogger("common.privdata")
    17  
    18  // MembershipProvider can be used to check whether a peer is eligible to a collection or not
    19  type MembershipProvider struct {
    20  	selfSignedData              protoutil.SignedData
    21  	IdentityDeserializerFactory func(chainID string) msp.IdentityDeserializer
    22  }
    23  
    24  // NewMembershipInfoProvider returns MembershipProvider
    25  func NewMembershipInfoProvider(selfSignedData protoutil.SignedData, identityDeserializerFunc func(chainID string) msp.IdentityDeserializer) *MembershipProvider {
    26  	return &MembershipProvider{selfSignedData: selfSignedData, IdentityDeserializerFactory: identityDeserializerFunc}
    27  }
    28  
    29  // AmMemberOf checks whether the current peer is a member of the given collection config.
    30  // If getPolicy returns an error, it will drop the error and return false - same as a RejectAll policy.
    31  func (m *MembershipProvider) AmMemberOf(channelName string, collectionPolicyConfig *peer.CollectionPolicyConfig) (bool, error) {
    32  	deserializer := m.IdentityDeserializerFactory(channelName)
    33  	accessPolicy, err := getPolicy(collectionPolicyConfig, deserializer)
    34  	if err != nil {
    35  		// drop the error and return false - same as reject all policy
    36  		logger.Errorf("Reject all due to error getting policy: %s", err)
    37  		return false, nil
    38  	}
    39  	if err := accessPolicy.EvaluateSignedData([]*protoutil.SignedData{&m.selfSignedData}); err != nil {
    40  		return false, nil
    41  	}
    42  	return true, nil
    43  }