mirror of https://github.com/poanetwork/quorum.git
integrate permission contracts with geth - update cache from contract and events
This commit is contained in:
parent
2a974fcfbb
commit
00c96e2bab
|
@ -283,12 +283,11 @@ func (p *PermissionCtrl) updateRoleChange(orgId string, role string) {
|
||||||
GasPrice: big.NewInt(0),
|
GasPrice: big.NewInt(0),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if rs, err := permAcctSession.GetRoleDetails(orgId, role); err != nil {
|
if rs, err := permAcctSession.GetRoleDetails(role, orgId); err != nil {
|
||||||
log.Error("AJ-failed to read role info ", "err", err)
|
log.Error("AJ-failed to read role info ", "err", err)
|
||||||
} else {
|
} else {
|
||||||
types.RoleInfoMap.UpsertRole(rs.RoleId, rs.RoleId, rs.Voter, int(rs.AccessType.Uint64()), rs.Active)
|
types.RoleInfoMap.UpsertRole(rs.OrgId, rs.RoleId, rs.Voter, int(rs.AccessType.Uint64()), rs.Active)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listens on the channel for new node deactivation via smart contract
|
// Listens on the channel for new node deactivation via smart contract
|
||||||
|
@ -900,7 +899,7 @@ func (p *PermissionCtrl) monitorOrgActivation() {
|
||||||
log.Info("Failed watchOrgActivated: %v", err)
|
log.Info("Failed watchOrgActivated: %v", err)
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
log.Info("AJ-new node approved waiting for events...")
|
log.Info("AJ-new org activated waiting for events...")
|
||||||
select {
|
select {
|
||||||
case evt = <-ch:
|
case evt = <-ch:
|
||||||
log.Info("AJ-OrgActivated", "node", evt.OrgId)
|
log.Info("AJ-OrgActivated", "node", evt.OrgId)
|
||||||
|
@ -923,7 +922,7 @@ func (p *PermissionCtrl) monitorNewOrgAdd() {
|
||||||
log.Info("Failed WatchNodeApproved: %v", err)
|
log.Info("Failed WatchNodeApproved: %v", err)
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
log.Info("AJ-new node approved waiting for events...")
|
log.Info("AJ-new org approved waiting for events...")
|
||||||
select {
|
select {
|
||||||
case evt = <-ch:
|
case evt = <-ch:
|
||||||
log.Info("AJ-newOrgApproved", "node", evt.OrgId)
|
log.Info("AJ-newOrgApproved", "node", evt.OrgId)
|
||||||
|
@ -934,7 +933,7 @@ func (p *PermissionCtrl) monitorNewOrgAdd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PermissionCtrl) monitorOrgDeactivation() {
|
func (p *PermissionCtrl) monitorOrgDeactivation() {
|
||||||
log.Info("AJ-new org added event monitor started...")
|
log.Info("AJ-new org suspended event monitor started...")
|
||||||
ch := make(chan *pbind.OrgManagerOrgSuspended, 1)
|
ch := make(chan *pbind.OrgManagerOrgSuspended, 1)
|
||||||
|
|
||||||
opts := &bind.WatchOpts{}
|
opts := &bind.WatchOpts{}
|
||||||
|
@ -944,15 +943,15 @@ func (p *PermissionCtrl) monitorOrgDeactivation() {
|
||||||
|
|
||||||
_, err := p.permOrg.OrgManagerFilterer.WatchOrgSuspended(opts, ch)
|
_, err := p.permOrg.OrgManagerFilterer.WatchOrgSuspended(opts, ch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Info("Failed WatchNodeApproved: %v", err)
|
log.Info("Failed WatchOrgSuspened: %v", err)
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
log.Info("AJ-new org approved waiting for events...")
|
log.Info("AJ-new org suspended waiting for events...")
|
||||||
select {
|
select {
|
||||||
case evt = <-ch:
|
case evt = <-ch:
|
||||||
log.Info("AJ-newOrgApproved", "node", evt.OrgId)
|
log.Info("AJ-newOrgSuspended", "node", evt.OrgId)
|
||||||
p.updateOrgChange(evt.OrgId)
|
p.updateOrgChange(evt.OrgId)
|
||||||
log.Info("AJ-newOrgApproved cached updated for ", "orgid", evt.OrgId)
|
log.Info("AJ-newOrgSuspended cached updated for ", "orgid", evt.OrgId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -984,12 +983,32 @@ func (p *PermissionCtrl) monitorNewRoleAdd() {
|
||||||
select {
|
select {
|
||||||
case evt = <-ch:
|
case evt = <-ch:
|
||||||
log.Info("AJ-newRoleCreated", "org", evt.OrgId, "role", evt.RoleId)
|
log.Info("AJ-newRoleCreated", "org", evt.OrgId, "role", evt.RoleId)
|
||||||
p.updateOrgChange(evt.OrgId)
|
p.updateRoleChange(evt.OrgId, evt.RoleId)
|
||||||
log.Info("AJ-newRoleCreated cached updated for ", "orgid", evt.OrgId, "role", evt.RoleId)
|
log.Info("AJ-newRoleCreated cached updated for ", "orgid", evt.OrgId, "role", evt.RoleId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PermissionCtrl) monitorNewRoleRemove() {
|
func (p *PermissionCtrl) monitorNewRoleRemove() {
|
||||||
|
log.Info("AJ-new role remove event monitor started...")
|
||||||
|
ch := make(chan *pbind.RoleManagerRoleRevoked, 1)
|
||||||
|
|
||||||
|
opts := &bind.WatchOpts{}
|
||||||
|
var blockNumber uint64 = 1
|
||||||
|
opts.Start = &blockNumber
|
||||||
|
var evt *pbind.RoleManagerRoleRevoked
|
||||||
|
|
||||||
|
_, err := p.permRole.RoleManagerFilterer.WatchRoleRevoked(opts, ch)
|
||||||
|
if err != nil {
|
||||||
|
log.Info("Failed WatchRoleRemoved: %v", err)
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
log.Info("AJ-new role removed waiting for events...")
|
||||||
|
select {
|
||||||
|
case evt = <-ch:
|
||||||
|
log.Info("AJ-newRoleRemoved", "org", evt.OrgId, "role", evt.RoleId)
|
||||||
|
p.updateRoleChange(evt.OrgId, evt.RoleId)
|
||||||
|
log.Info("AJ-newRoleRemoved cached updated for ", "orgid", evt.OrgId, "role", evt.RoleId)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,6 +270,22 @@ func (s *QuorumControlsAPI) PermissionNodeList() []nodeStatus {
|
||||||
return nodeStatArr
|
return nodeStatArr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *QuorumControlsAPI) OrgList() []types.OrgInfo {
|
||||||
|
return types.OrgInfoMap.GetOrgList()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *QuorumControlsAPI) NodeList() []types.NodeInfo {
|
||||||
|
return types.NodeInfoMap.GetNodeList()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *QuorumControlsAPI) RoleList() []types.RoleInfo {
|
||||||
|
return types.RoleInfoMap.GetRoleList()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *QuorumControlsAPI) AcctList() []types.AccountInfo {
|
||||||
|
return types.AcctInfoMap.GetAcctList()
|
||||||
|
}
|
||||||
|
|
||||||
// Returns the list of permissioned accounts and access type of each
|
// Returns the list of permissioned accounts and access type of each
|
||||||
func (s *QuorumControlsAPI) PermissionAccountList() []accountInfo {
|
func (s *QuorumControlsAPI) PermissionAccountList() []accountInfo {
|
||||||
if !s.permEnabled {
|
if !s.permEnabled {
|
||||||
|
|
|
@ -208,6 +208,15 @@ func (o *OrgCache) Show() {
|
||||||
log.Info("AJ-Org", "i", i, "key", k, "value", v)
|
log.Info("AJ-Org", "i", i, "key", k, "value", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func (o *OrgCache) GetOrgList() []OrgInfo {
|
||||||
|
var olist []OrgInfo
|
||||||
|
for _, k := range o.c.Keys() {
|
||||||
|
v, _ := o.c.Get(k)
|
||||||
|
vp := v.(*OrgInfo)
|
||||||
|
olist = append(olist, *vp)
|
||||||
|
}
|
||||||
|
return olist
|
||||||
|
}
|
||||||
|
|
||||||
func (n *NodeCache) UpsertNode(orgId string, url string, status int) {
|
func (n *NodeCache) UpsertNode(orgId string, url string, status int) {
|
||||||
defer n.mux.Unlock()
|
defer n.mux.Unlock()
|
||||||
|
@ -251,6 +260,16 @@ func (o *NodeCache) Show() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *NodeCache) GetNodeList() []NodeInfo {
|
||||||
|
var olist []NodeInfo
|
||||||
|
for _, k := range o.c.Keys() {
|
||||||
|
v, _ := o.c.Get(k)
|
||||||
|
vp := v.(*NodeInfo)
|
||||||
|
olist = append(olist, *vp)
|
||||||
|
}
|
||||||
|
return olist
|
||||||
|
}
|
||||||
|
|
||||||
func (a *AcctCache) UpsertAccount(orgId string, role string, acct common.Address, orgAdmin bool, status int) {
|
func (a *AcctCache) UpsertAccount(orgId string, role string, acct common.Address, orgAdmin bool, status int) {
|
||||||
defer a.mux.Unlock()
|
defer a.mux.Unlock()
|
||||||
a.mux.Lock()
|
a.mux.Lock()
|
||||||
|
@ -293,6 +312,16 @@ func (o *AcctCache) Show() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *AcctCache) GetAcctList() []AccountInfo {
|
||||||
|
var olist []AccountInfo
|
||||||
|
for _, k := range o.c.Keys() {
|
||||||
|
v, _ := o.c.Get(k)
|
||||||
|
vp := v.(*AccountInfo)
|
||||||
|
olist = append(olist, *vp)
|
||||||
|
}
|
||||||
|
return olist
|
||||||
|
}
|
||||||
|
|
||||||
func (r *RoleCache) UpsertRole(orgId string, role string, voter bool, access int, active bool) {
|
func (r *RoleCache) UpsertRole(orgId string, role string, voter bool, access int, active bool) {
|
||||||
defer r.mux.Unlock()
|
defer r.mux.Unlock()
|
||||||
r.mux.Lock()
|
r.mux.Lock()
|
||||||
|
@ -324,6 +353,16 @@ func (r *RoleCache) Show() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *RoleCache) GetRoleList() []RoleInfo {
|
||||||
|
var olist []RoleInfo
|
||||||
|
for _, k := range o.c.Keys() {
|
||||||
|
v, _ := o.c.Get(k)
|
||||||
|
vp := v.(*RoleInfo)
|
||||||
|
olist = append(olist, *vp)
|
||||||
|
}
|
||||||
|
return olist
|
||||||
|
}
|
||||||
|
|
||||||
// Adds account access to the cache
|
// Adds account access to the cache
|
||||||
func AddAccountAccess(acctId common.Address, roleId string) {
|
func AddAccountAccess(acctId common.Address, roleId string) {
|
||||||
AcctMap.Add(acctId, &PermStruct{AcctId: acctId, roleId: roleId})
|
AcctMap.Add(acctId, &PermStruct{AcctId: acctId, roleId: roleId})
|
||||||
|
|
|
@ -833,7 +833,23 @@ web3._extend({
|
||||||
new web3._extend.Property({
|
new web3._extend.Property({
|
||||||
name: 'voterList',
|
name: 'voterList',
|
||||||
getter: 'quorumNodeMgmt_voterList'
|
getter: 'quorumNodeMgmt_voterList'
|
||||||
}),
|
}),
|
||||||
|
new web3._extend.Property({
|
||||||
|
name: 'orgList',
|
||||||
|
getter: 'quorumNodeMgmt_orgList'
|
||||||
|
}),
|
||||||
|
new web3._extend.Property({
|
||||||
|
name: 'nodeList',
|
||||||
|
getter: 'quorumNodeMgmt_nodeList'
|
||||||
|
}),
|
||||||
|
new web3._extend.Property({
|
||||||
|
name: 'roleList',
|
||||||
|
getter: 'quorumNodeMgmt_roleList'
|
||||||
|
}),
|
||||||
|
new web3._extend.Property({
|
||||||
|
name: 'acctList',
|
||||||
|
getter: 'quorumNodeMgmt_acctList'
|
||||||
|
}),
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
`
|
`
|
||||||
|
|
Loading…
Reference in New Issue