github.com/yacovm/fabric@v2.0.0-alpha.0.20191128145320-c5d4087dc723+incompatible/common/channelconfig/applicationorg.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package channelconfig
     8  
     9  import (
    10  	"fmt"
    11  
    12  	cb "github.com/hyperledger/fabric-protos-go/common"
    13  	pb "github.com/hyperledger/fabric-protos-go/peer"
    14  	"github.com/pkg/errors"
    15  )
    16  
    17  const (
    18  	// AnchorPeersKey is the key name for the AnchorPeers ConfigValue
    19  	AnchorPeersKey = "AnchorPeers"
    20  )
    21  
    22  // ApplicationOrgProtos are deserialized from the config
    23  type ApplicationOrgProtos struct {
    24  	AnchorPeers *pb.AnchorPeers
    25  }
    26  
    27  // ApplicationOrgConfig defines the configuration for an application org
    28  type ApplicationOrgConfig struct {
    29  	*OrganizationConfig
    30  	protos *ApplicationOrgProtos
    31  	name   string
    32  }
    33  
    34  // NewApplicationOrgConfig creates a new config for an application org
    35  func NewApplicationOrgConfig(id string, orgGroup *cb.ConfigGroup, mspConfig *MSPConfigHandler) (*ApplicationOrgConfig, error) {
    36  	if len(orgGroup.Groups) > 0 {
    37  		return nil, fmt.Errorf("ApplicationOrg config does not allow sub-groups")
    38  	}
    39  
    40  	protos := &ApplicationOrgProtos{}
    41  	orgProtos := &OrganizationProtos{}
    42  
    43  	if err := DeserializeProtoValuesFromGroup(orgGroup, protos, orgProtos); err != nil {
    44  		return nil, errors.Wrap(err, "failed to deserialize values")
    45  	}
    46  
    47  	aoc := &ApplicationOrgConfig{
    48  		name:   id,
    49  		protos: protos,
    50  		OrganizationConfig: &OrganizationConfig{
    51  			name:             id,
    52  			protos:           orgProtos,
    53  			mspConfigHandler: mspConfig,
    54  		},
    55  	}
    56  
    57  	if err := aoc.Validate(); err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	return aoc, nil
    62  }
    63  
    64  // AnchorPeers returns the list of anchor peers of this Organization
    65  func (aog *ApplicationOrgConfig) AnchorPeers() []*pb.AnchorPeer {
    66  	return aog.protos.AnchorPeers.AnchorPeers
    67  }
    68  
    69  func (aoc *ApplicationOrgConfig) Validate() error {
    70  	logger.Debugf("Anchor peers for org %s are %v", aoc.name, aoc.protos.AnchorPeers)
    71  	return aoc.OrganizationConfig.Validate()
    72  }