forked from hyperledger/fabric
/
policymanager.go
57 lines (47 loc) · 1.26 KB
/
policymanager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
Copyright IBM Corp. 2017 All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package server
import (
"sync"
"github.com/ZihuaZhang/fabric/common/channelconfig"
"github.com/ZihuaZhang/fabric/common/flogging"
"github.com/ZihuaZhang/fabric/common/policies"
)
type DynamicPolicyManagerRegistry struct {
m sync.Map
Logger *flogging.FabricLogger
}
func (dpmr *DynamicPolicyManagerRegistry) Update(bundle *channelconfig.Bundle) {
chainID := bundle.ConfigtxValidator().ChannelID()
dpmr.m.Store(chainID, bundle.PolicyManager())
}
func (dpmr *DynamicPolicyManagerRegistry) Registry() func(channel string) policies.Manager {
return func(channel string) policies.Manager {
return &dynamicPolicyManager{
m: &dpmr.m,
logger: dpmr.Logger,
channel: channel,
}
}
}
type dynamicPolicyManager struct {
channel string
m *sync.Map
logger *flogging.FabricLogger
}
func (dpm *dynamicPolicyManager) GetPolicy(id string) (policies.Policy, bool) {
o, ok := dpm.m.Load(dpm.channel)
if !ok {
return nil, false
}
return o.(policies.Manager).GetPolicy(id)
}
func (dpm *dynamicPolicyManager) Manager(path []string) (policies.Manager, bool) {
o, ok := dpm.m.Load(dpm.channel)
if !ok {
return nil, false
}
return o.(policies.Manager).Manager(path)
}