@@ -51,6 +51,12 @@ const (
51
51
52
52
// OrdererAdminsPolicy is the absolute path to the orderer admins policy
53
53
OrdererAdminsPolicy = "/Channel/Orderer/Admins"
54
+
55
+ // SignaturePolicyType is the 'Type' string for signature policies
56
+ SignaturePolicyType = "Signature"
57
+
58
+ // ImplicitMetaPolicyType is the 'Type' string for implicit meta policies
59
+ ImplicitMetaPolicyType = "ImplicitMeta"
54
60
)
55
61
56
62
func addValue (cg * cb.ConfigGroup , value channelconfig.ConfigValue , modPolicy string ) {
@@ -67,6 +73,40 @@ func addPolicy(cg *cb.ConfigGroup, policy policies.ConfigPolicy, modPolicy strin
67
73
}
68
74
}
69
75
76
+ func addPolicies (cg * cb.ConfigGroup , policyMap map [string ]* genesisconfig.Policy , modPolicy string ) error {
77
+ for policyName , policy := range policyMap {
78
+ switch policy .Type {
79
+ case ImplicitMetaPolicyType :
80
+ imp , err := policies .ImplicitMetaFromString (policy .Rule )
81
+ if err != nil {
82
+ return errors .Wrapf (err , "invalid implicit meta policy rule '%s'" , policy .Rule )
83
+ }
84
+ cg .Policies [policyName ] = & cb.ConfigPolicy {
85
+ ModPolicy : modPolicy ,
86
+ Policy : & cb.Policy {
87
+ Type : int32 (cb .Policy_IMPLICIT_META ),
88
+ Value : utils .MarshalOrPanic (imp ),
89
+ },
90
+ }
91
+ case SignaturePolicyType :
92
+ sp , err := cauthdsl .FromString (policy .Rule )
93
+ if err != nil {
94
+ return errors .Wrapf (err , "invalid signature policy rule '%s'" , policy .Rule )
95
+ }
96
+ cg .Policies [policyName ] = & cb.ConfigPolicy {
97
+ ModPolicy : modPolicy ,
98
+ Policy : & cb.Policy {
99
+ Type : int32 (cb .Policy_SIGNATURE ),
100
+ Value : utils .MarshalOrPanic (sp ),
101
+ },
102
+ }
103
+ default :
104
+ return errors .Errorf ("unknown policy type: %s" , policy .Type )
105
+ }
106
+ }
107
+ return nil
108
+ }
109
+
70
110
// addImplicitMetaPolicyDefaults adds the Readers/Writers/Admins policies, with Any/Any/Majority rules respectively.
71
111
func addImplicitMetaPolicyDefaults (cg * cb.ConfigGroup ) {
72
112
addPolicy (cg , policies .ImplicitMetaMajorityPolicy (channelconfig .AdminsPolicyKey ), channelconfig .AdminsPolicyKey )
@@ -79,6 +119,7 @@ func addImplicitMetaPolicyDefaults(cg *cb.ConfigGroup) {
79
119
// the admin role principal.
80
120
func addSignaturePolicyDefaults (cg * cb.ConfigGroup , mspID string , devMode bool ) {
81
121
if devMode {
122
+ logger .Warningf ("Specifying AdminPrincipal is deprecated and will be removed in a future release, override the admin principal with explicit policies." )
82
123
addPolicy (cg , policies .SignaturePolicy (channelconfig .AdminsPolicyKey , cauthdsl .SignedByMspMember (mspID )), channelconfig .AdminsPolicyKey )
83
124
} else {
84
125
addPolicy (cg , policies .SignaturePolicy (channelconfig .AdminsPolicyKey , cauthdsl .SignedByMspAdmin (mspID )), channelconfig .AdminsPolicyKey )
@@ -98,7 +139,15 @@ func NewChannelGroup(conf *genesisconfig.Profile) (*cb.ConfigGroup, error) {
98
139
}
99
140
100
141
channelGroup := cb .NewConfigGroup ()
101
- addImplicitMetaPolicyDefaults (channelGroup )
142
+ if len (conf .Policies ) == 0 {
143
+ logger .Warningf ("Default policy emission is deprecated, please include policy specificiations for the channel group in configtx.yaml" )
144
+ addImplicitMetaPolicyDefaults (channelGroup )
145
+ } else {
146
+ if err := addPolicies (channelGroup , conf .Policies , channelconfig .AdminsPolicyKey ); err != nil {
147
+ return nil , errors .Wrapf (err , "error adding policies to channel group" )
148
+ }
149
+ }
150
+
102
151
addValue (channelGroup , channelconfig .HashingAlgorithmValue (), channelconfig .AdminsPolicyKey )
103
152
addValue (channelGroup , channelconfig .BlockDataHashingStructureValue (), channelconfig .AdminsPolicyKey )
104
153
addValue (channelGroup , channelconfig .OrdererAddressesValue (conf .Orderer .Addresses ), ordererAdminsPolicyName )
@@ -140,7 +189,14 @@ func NewChannelGroup(conf *genesisconfig.Profile) (*cb.ConfigGroup, error) {
140
189
// It sets the mod_policy of all elements to "Admins". This group is always present in any channel configuration.
141
190
func NewOrdererGroup (conf * genesisconfig.Orderer ) (* cb.ConfigGroup , error ) {
142
191
ordererGroup := cb .NewConfigGroup ()
143
- addImplicitMetaPolicyDefaults (ordererGroup )
192
+ if len (conf .Policies ) == 0 {
193
+ logger .Warningf ("Default policy emission is deprecated, please include policy specificiations for the orderer group in configtx.yaml" )
194
+ addImplicitMetaPolicyDefaults (ordererGroup )
195
+ } else {
196
+ if err := addPolicies (ordererGroup , conf .Policies , channelconfig .AdminsPolicyKey ); err != nil {
197
+ return nil , errors .Wrapf (err , "error adding policies to orderer group" )
198
+ }
199
+ }
144
200
ordererGroup .Policies [BlockValidationPolicyKey ] = & cb.ConfigPolicy {
145
201
Policy : policies .ImplicitMetaAnyPolicy (channelconfig .WritersPolicyKey ).Value (),
146
202
ModPolicy : channelconfig .AdminsPolicyKey ,
@@ -187,7 +243,15 @@ func NewOrdererOrgGroup(conf *genesisconfig.Organization) (*cb.ConfigGroup, erro
187
243
}
188
244
189
245
ordererOrgGroup := cb .NewConfigGroup ()
190
- addSignaturePolicyDefaults (ordererOrgGroup , conf .ID , conf .AdminPrincipal != genesisconfig .AdminRoleAdminPrincipal )
246
+ if len (conf .Policies ) == 0 {
247
+ logger .Warningf ("Default policy emission is deprecated, please include policy specificiations for the orderer org group %s in configtx.yaml" , conf .Name )
248
+ addSignaturePolicyDefaults (ordererOrgGroup , conf .ID , conf .AdminPrincipal != genesisconfig .AdminRoleAdminPrincipal )
249
+ } else {
250
+ if err := addPolicies (ordererOrgGroup , conf .Policies , channelconfig .AdminsPolicyKey ); err != nil {
251
+ return nil , errors .Wrapf (err , "error adding policies to orderer org group '%s'" , conf .Name )
252
+ }
253
+ }
254
+
191
255
addValue (ordererOrgGroup , channelconfig .MSPValue (mspConfig ), channelconfig .AdminsPolicyKey )
192
256
193
257
ordererOrgGroup .ModPolicy = channelconfig .AdminsPolicyKey
@@ -198,7 +262,14 @@ func NewOrdererOrgGroup(conf *genesisconfig.Organization) (*cb.ConfigGroup, erro
198
262
// in application logic like chaincodes, and how these members may interact with the orderer. It sets the mod_policy of all elements to "Admins".
199
263
func NewApplicationGroup (conf * genesisconfig.Application ) (* cb.ConfigGroup , error ) {
200
264
applicationGroup := cb .NewConfigGroup ()
201
- addImplicitMetaPolicyDefaults (applicationGroup )
265
+ if len (conf .Policies ) == 0 {
266
+ logger .Warningf ("Default policy emission is deprecated, please include policy specificiations for the application group in configtx.yaml" )
267
+ addImplicitMetaPolicyDefaults (applicationGroup )
268
+ } else {
269
+ if err := addPolicies (applicationGroup , conf .Policies , channelconfig .AdminsPolicyKey ); err != nil {
270
+ return nil , errors .Wrapf (err , "error adding policies to application group" )
271
+ }
272
+ }
202
273
203
274
if len (conf .Capabilities ) > 0 {
204
275
addValue (applicationGroup , channelconfig .CapabilitiesValue (conf .Capabilities ), channelconfig .AdminsPolicyKey )
@@ -225,7 +296,14 @@ func NewApplicationOrgGroup(conf *genesisconfig.Organization) (*cb.ConfigGroup,
225
296
}
226
297
227
298
applicationOrgGroup := cb .NewConfigGroup ()
228
- addSignaturePolicyDefaults (applicationOrgGroup , conf .ID , conf .AdminPrincipal != genesisconfig .AdminRoleAdminPrincipal )
299
+ if len (conf .Policies ) == 0 {
300
+ logger .Warningf ("Default policy emission is deprecated, please include policy specificiations for the application org group %s in configtx.yaml" , conf .Name )
301
+ addSignaturePolicyDefaults (applicationOrgGroup , conf .ID , conf .AdminPrincipal != genesisconfig .AdminRoleAdminPrincipal )
302
+ } else {
303
+ if err := addPolicies (applicationOrgGroup , conf .Policies , channelconfig .AdminsPolicyKey ); err != nil {
304
+ return nil , errors .Wrapf (err , "error adding policies to application org group %s" , conf .Name )
305
+ }
306
+ }
229
307
addValue (applicationOrgGroup , channelconfig .MSPValue (mspConfig ), channelconfig .AdminsPolicyKey )
230
308
231
309
var anchorProtos []* pb.AnchorPeer
0 commit comments