integrate permission contracts with geth - update cache from contract and events

This commit is contained in:
amalraj.manigmail.com 2019-03-28 18:59:30 +08:00
parent 2a974fcfbb
commit 00c96e2bab
4 changed files with 102 additions and 12 deletions

View File

@ -283,12 +283,11 @@ func (p *PermissionCtrl) updateRoleChange(orgId string, role string) {
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)
} 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
@ -900,7 +899,7 @@ func (p *PermissionCtrl) monitorOrgActivation() {
log.Info("Failed watchOrgActivated: %v", err)
}
for {
log.Info("AJ-new node approved waiting for events...")
log.Info("AJ-new org activated waiting for events...")
select {
case evt = <-ch:
log.Info("AJ-OrgActivated", "node", evt.OrgId)
@ -923,7 +922,7 @@ func (p *PermissionCtrl) monitorNewOrgAdd() {
log.Info("Failed WatchNodeApproved: %v", err)
}
for {
log.Info("AJ-new node approved waiting for events...")
log.Info("AJ-new org approved waiting for events...")
select {
case evt = <-ch:
log.Info("AJ-newOrgApproved", "node", evt.OrgId)
@ -934,7 +933,7 @@ func (p *PermissionCtrl) monitorNewOrgAdd() {
}
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)
opts := &bind.WatchOpts{}
@ -944,15 +943,15 @@ func (p *PermissionCtrl) monitorOrgDeactivation() {
_, err := p.permOrg.OrgManagerFilterer.WatchOrgSuspended(opts, ch)
if err != nil {
log.Info("Failed WatchNodeApproved: %v", err)
log.Info("Failed WatchOrgSuspened: %v", err)
}
for {
log.Info("AJ-new org approved waiting for events...")
log.Info("AJ-new org suspended waiting for events...")
select {
case evt = <-ch:
log.Info("AJ-newOrgApproved", "node", evt.OrgId)
log.Info("AJ-newOrgSuspended", "node", 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 {
case evt = <-ch:
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)
}
}
}
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)
}
}
}

View File

@ -270,6 +270,22 @@ func (s *QuorumControlsAPI) PermissionNodeList() []nodeStatus {
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
func (s *QuorumControlsAPI) PermissionAccountList() []accountInfo {
if !s.permEnabled {

View File

@ -208,6 +208,15 @@ func (o *OrgCache) Show() {
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) {
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) {
defer a.mux.Unlock()
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) {
defer r.mux.Unlock()
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
func AddAccountAccess(acctId common.Address, roleId string) {
AcctMap.Add(acctId, &PermStruct{AcctId: acctId, roleId: roleId})

View File

@ -833,7 +833,23 @@ web3._extend({
new web3._extend.Property({
name: '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'
}),
]
})
`