mirror of https://github.com/poanetwork/quorum.git
permissions: changed permissions cache to handle all suborg level attributes
This commit is contained in:
parent
6f7c413a90
commit
1cf69208d7
File diff suppressed because one or more lines are too long
|
@ -26,10 +26,10 @@ contract OrgManager {
|
|||
uint private orgNum = 0;
|
||||
|
||||
// events related to Master Org add
|
||||
event OrgApproved(string _orgId);
|
||||
event OrgPendingApproval(string _orgId, uint _type);
|
||||
event OrgSuspended(string _orgId);
|
||||
event OrgSuspensionRevoked(string _orgId);
|
||||
event OrgApproved(string _orgId, string _porgId, string _ultParent, uint _level, uint _status);
|
||||
event OrgPendingApproval(string _orgId, string _porgId, string _ultParent, uint _level, uint _status);
|
||||
event OrgSuspended(string _orgId, string _porgId, string _ultParent, uint _level);
|
||||
event OrgSuspensionRevoked(string _orgId, string _porgId, string _ultParent, uint _level);
|
||||
|
||||
modifier onlyImpl
|
||||
{
|
||||
|
@ -59,7 +59,6 @@ contract OrgManager {
|
|||
onlyImpl
|
||||
{
|
||||
addNewOrg("", _orgId, 1, 2);
|
||||
emit OrgApproved(_orgId);
|
||||
}
|
||||
|
||||
function addNewOrg(string memory _pOrg, string memory _orgId, uint _level, uint _status) internal
|
||||
|
@ -98,6 +97,12 @@ contract OrgManager {
|
|||
orgList[id].orgId = _orgId;
|
||||
orgList[id].parentId = _pOrg;
|
||||
orgList[id].status = _status;
|
||||
if (_status == 1) {
|
||||
emit OrgPendingApproval(_orgId, _pOrg, orgList[id].ultParent, orgList[id].level, 1);
|
||||
}
|
||||
else {
|
||||
emit OrgApproved(_orgId, _pOrg, orgList[id].ultParent, orgList[id].level, 2);
|
||||
}
|
||||
}
|
||||
|
||||
function getNumberOfOrgs() public view returns (uint)
|
||||
|
@ -123,7 +128,6 @@ contract OrgManager {
|
|||
orgNotExists(_orgId)
|
||||
{
|
||||
addNewOrg("", _orgId, 1, 1);
|
||||
emit OrgPendingApproval(_orgId, 1);
|
||||
}
|
||||
|
||||
// function for adding a new master org
|
||||
|
@ -132,7 +136,6 @@ contract OrgManager {
|
|||
orgNotExists(string(abi.encodePacked(_pOrg, ".", _orgId)))
|
||||
{
|
||||
addNewOrg(_pOrg, _orgId, 2, 2);
|
||||
emit OrgApproved(_orgId);
|
||||
}
|
||||
|
||||
function updateOrg(string calldata _orgId, uint _status) external
|
||||
|
@ -180,7 +183,7 @@ contract OrgManager {
|
|||
require(checkOrgStatus(_orgId, 2) == true, "Org not in approved state");
|
||||
uint id = getOrgIndex(_orgId);
|
||||
orgList[id].status = 3;
|
||||
emit OrgPendingApproval(_orgId, 3);
|
||||
emit OrgPendingApproval(_orgId, orgList[id].parentId, orgList[id].ultParent, orgList[id].level, 3);
|
||||
}
|
||||
|
||||
function revokeOrgSuspension(string memory _orgId) internal
|
||||
|
@ -189,7 +192,7 @@ contract OrgManager {
|
|||
require(checkOrgStatus(_orgId, 4) == true, "Org not in suspended state");
|
||||
uint id = getOrgIndex(_orgId);
|
||||
orgList[id].status = 5;
|
||||
emit OrgPendingApproval(_orgId, 5);
|
||||
emit OrgPendingApproval(_orgId, orgList[id].parentId, orgList[id].ultParent, orgList[id].level, 5);
|
||||
}
|
||||
|
||||
function approveOrg(string calldata _orgId) external
|
||||
|
@ -198,7 +201,7 @@ contract OrgManager {
|
|||
require(checkOrgStatus(_orgId, 1) == true, "Nothing to approve");
|
||||
uint id = getOrgIndex(_orgId);
|
||||
orgList[id].status = 2;
|
||||
emit OrgApproved(_orgId);
|
||||
emit OrgApproved(_orgId, orgList[id].parentId, orgList[id].ultParent, orgList[id].level, 2);
|
||||
}
|
||||
|
||||
function approveOrgSuspension(string memory _orgId) internal
|
||||
|
@ -206,7 +209,7 @@ contract OrgManager {
|
|||
require(checkOrgStatus(_orgId, 3) == true, "Nothing to approve");
|
||||
uint id = getOrgIndex(_orgId);
|
||||
orgList[id].status = 4;
|
||||
emit OrgSuspended(_orgId);
|
||||
emit OrgSuspended(_orgId, orgList[id].parentId, orgList[id].ultParent, orgList[id].level);
|
||||
}
|
||||
|
||||
function approveOrgRevokeSuspension(string memory _orgId) internal
|
||||
|
@ -214,7 +217,7 @@ contract OrgManager {
|
|||
require(checkOrgStatus(_orgId, 5) == true, "Nothing to approve");
|
||||
uint id = getOrgIndex(_orgId);
|
||||
orgList[id].status = 2;
|
||||
emit OrgSuspensionRevoked(_orgId);
|
||||
emit OrgSuspensionRevoked(_orgId, orgList[id].parentId, orgList[id].ultParent, orgList[id].level);
|
||||
}
|
||||
|
||||
function checkOrgStatus(string memory _orgId, uint _orgStatus) public view returns (bool){
|
||||
|
@ -235,9 +238,9 @@ contract OrgManager {
|
|||
}
|
||||
|
||||
// returns org and master org details based on org index
|
||||
function getOrgInfo(uint _orgIndex) external view returns (string memory, string memory, uint, uint, string memory, uint, uint[] memory)
|
||||
function getOrgInfo(uint _orgIndex) external view returns (string memory, string memory, string memory, uint, uint)
|
||||
{
|
||||
return (orgList[_orgIndex].parentId, orgList[_orgIndex].ultParent, orgList[_orgIndex].pindex, orgList[_orgIndex].level, orgList[_orgIndex].orgId, orgList[_orgIndex].status, orgList[_orgIndex].subOrgIndexList);
|
||||
return (orgList[_orgIndex].orgId, orgList[_orgIndex].parentId, orgList[_orgIndex].ultParent, orgList[_orgIndex].level, orgList[_orgIndex].status);
|
||||
}
|
||||
|
||||
function getSubOrgInfo(uint _orgIndex) external view returns (uint[] memory)
|
||||
|
|
|
@ -1 +1 @@
|
|||
[{"constant":false,"inputs":[{"name":"_orgId","type":"string"},{"name":"_status","type":"uint256"}],"name":"updateOrg","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"getOrgIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"},{"name":"_status","type":"uint256"}],"name":"approveOrgStatusUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"getUltimateParent","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"}],"name":"getSubOrgIndexLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pOrg","type":"string"},{"name":"_orgId","type":"string"}],"name":"addSubOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_pOrg","type":"string"},{"name":"_orgId","type":"string"}],"name":"checkNodeExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"}],"name":"addAdminOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"},{"name":"_subOrgIndex","type":"uint256"}],"name":"getSubOrgIndexLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"}],"name":"getOrgInfo","outputs":[{"name":"","type":"string"},{"name":"","type":"string"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"string"},{"name":"","type":"uint256"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumberOfOrgs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"},{"name":"_orgStatus","type":"uint256"}],"name":"checkOrgStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"}],"name":"getSubOrgInfo","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getImpl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"}],"name":"approveOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"}],"name":"addOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"getOrgStatus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"checkOrgExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_permUpgradable","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"}],"name":"OrgApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"},{"indexed":false,"name":"_type","type":"uint256"}],"name":"OrgPendingApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"}],"name":"OrgSuspended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"}],"name":"OrgSuspensionRevoked","type":"event"}]
|
||||
[{"constant":false,"inputs":[{"name":"_orgId","type":"string"},{"name":"_status","type":"uint256"}],"name":"updateOrg","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"getOrgIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"},{"name":"_status","type":"uint256"}],"name":"approveOrgStatusUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"getUltimateParent","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"}],"name":"getSubOrgIndexLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pOrg","type":"string"},{"name":"_orgId","type":"string"}],"name":"addSubOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_pOrg","type":"string"},{"name":"_orgId","type":"string"}],"name":"checkNodeExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"}],"name":"addAdminOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"},{"name":"_subOrgIndex","type":"uint256"}],"name":"getSubOrgIndexLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"}],"name":"getOrgInfo","outputs":[{"name":"","type":"string"},{"name":"","type":"string"},{"name":"","type":"string"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumberOfOrgs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"},{"name":"_orgStatus","type":"uint256"}],"name":"checkOrgStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgIndex","type":"uint256"}],"name":"getSubOrgInfo","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getImpl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"}],"name":"approveOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orgId","type":"string"}],"name":"addOrg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"getOrgStatus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_orgId","type":"string"}],"name":"checkOrgExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_permUpgradable","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"},{"indexed":false,"name":"_porgId","type":"string"},{"indexed":false,"name":"_ultParent","type":"string"},{"indexed":false,"name":"_level","type":"uint256"},{"indexed":false,"name":"_status","type":"uint256"}],"name":"OrgApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"},{"indexed":false,"name":"_porgId","type":"string"},{"indexed":false,"name":"_ultParent","type":"string"},{"indexed":false,"name":"_level","type":"uint256"},{"indexed":false,"name":"_status","type":"uint256"}],"name":"OrgPendingApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"},{"indexed":false,"name":"_porgId","type":"string"},{"indexed":false,"name":"_ultParent","type":"string"},{"indexed":false,"name":"_level","type":"uint256"}],"name":"OrgSuspended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_orgId","type":"string"},{"indexed":false,"name":"_porgId","type":"string"},{"indexed":false,"name":"_ultParent","type":"string"},{"indexed":false,"name":"_level","type":"uint256"}],"name":"OrgSuspensionRevoked","type":"event"}]
|
|
@ -251,16 +251,16 @@ func (p *PermissionCtrl) manageOrgPermissions() {
|
|||
for {
|
||||
select {
|
||||
case evtPendingApproval = <-chPendingApproval:
|
||||
types.OrgInfoMap.UpsertOrg(evtPendingApproval.OrgId, types.OrgStatus(evtPendingApproval.Type.Uint64()))
|
||||
types.OrgInfoMap.UpsertOrg(evtPendingApproval.OrgId, evtPendingApproval.PorgId, evtPendingApproval.UltParent, evtPendingApproval.Level, types.OrgStatus(evtPendingApproval.Status.Uint64()))
|
||||
|
||||
case evtOrgApproved = <-chOrgApproved:
|
||||
types.OrgInfoMap.UpsertOrg(evtOrgApproved.OrgId, types.OrgApproved)
|
||||
types.OrgInfoMap.UpsertOrg(evtOrgApproved.OrgId, evtOrgApproved.PorgId, evtOrgApproved.UltParent, evtOrgApproved.Level, types.OrgApproved)
|
||||
|
||||
case evtOrgSuspended = <-chOrgSuspended:
|
||||
types.OrgInfoMap.UpsertOrg(evtOrgSuspended.OrgId, types.OrgSuspended)
|
||||
types.OrgInfoMap.UpsertOrg(evtOrgSuspended.OrgId, evtOrgSuspended.PorgId, evtOrgSuspended.UltParent, evtOrgSuspended.Level, types.OrgSuspended)
|
||||
|
||||
case evtOrgReactivated = <-chOrgReactivated:
|
||||
types.OrgInfoMap.UpsertOrg(evtOrgReactivated.OrgId, types.OrgApproved)
|
||||
types.OrgInfoMap.UpsertOrg(evtOrgReactivated.OrgId, evtOrgReactivated.PorgId, evtOrgReactivated.UltParent, evtOrgReactivated.Level, types.OrgApproved)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -562,7 +562,7 @@ func (p *PermissionCtrl) bootupNetwork(permInterfSession *pbind.PermInterfaceSes
|
|||
return err
|
||||
}
|
||||
|
||||
types.OrgInfoMap.UpsertOrg(p.permConfig.NwAdminOrg, 2)
|
||||
types.OrgInfoMap.UpsertOrg(p.permConfig.NwAdminOrg, "", "", big.NewInt(1), types.OrgApproved)
|
||||
types.RoleInfoMap.UpsertRole(p.permConfig.NwAdminOrg, p.permConfig.NwAdminRole, true, types.FullAccess, true)
|
||||
// populate the initial node list from static-nodes.json
|
||||
if err := p.populateStaticNodesToContract(permInterfSession); err != nil {
|
||||
|
@ -654,11 +654,10 @@ func (p *PermissionCtrl) populateOrgsFromContract(auth *bind.TransactOpts) {
|
|||
if numberOfOrgs, err := permOrgSession.GetNumberOfOrgs(); err == nil {
|
||||
iOrgNum := numberOfOrgs.Uint64()
|
||||
for k := uint64(0); k < iOrgNum; k++ {
|
||||
if _, _, _, _, o, s, _, err := permOrgSession.GetOrgInfo(big.NewInt(int64(k))); err == nil {
|
||||
types.OrgInfoMap.UpsertOrg(o, types.OrgStatus(int(s.Int64())))
|
||||
if orgId, porgId, ultParent, level, status, err := permOrgSession.GetOrgInfo(big.NewInt(int64(k))); err == nil {
|
||||
types.OrgInfoMap.UpsertOrg(orgId, porgId, ultParent, level, types.OrgStatus(int(status.Int64())))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import (
|
|||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"math/big"
|
||||
"strings"
|
||||
)
|
||||
|
||||
//default gas limit to use if not passed in sendTxArgs
|
||||
|
@ -215,9 +216,9 @@ func (s *QuorumControlsAPI) AddOrg(orgId string, url string, acct common.Address
|
|||
return s.executePermAction(AddOrg, txArgs{orgId: orgId, url: url, acctId: acct, txa: txa})
|
||||
}
|
||||
|
||||
//func (s *QuorumControlsAPI) AddSubOrg(porgId, orgId string, url string, acct common.Address, txa ethapi.SendTxArgs) ExecStatus {
|
||||
// return s.executePermAction(AddSubOrg, txArgs{porgId: porgId, orgId: orgId, url: url, acctId: acct, txa: txa})
|
||||
//}
|
||||
func (s *QuorumControlsAPI) AddSubOrg(porgId, orgId string, url string, acct common.Address, txa ethapi.SendTxArgs) ExecStatus {
|
||||
return s.executePermAction(AddSubOrg, txArgs{porgId: porgId, orgId: orgId, url: url, acctId: acct, txa: txa})
|
||||
}
|
||||
|
||||
func (s *QuorumControlsAPI) ApproveOrg(orgId string, url string, acct common.Address, txa ethapi.SendTxArgs) ExecStatus {
|
||||
return s.executePermAction(ApproveOrg, txArgs{orgId: orgId, url: url, acctId: acct, txa: txa})
|
||||
|
@ -268,7 +269,7 @@ func (s *QuorumControlsAPI) isNetworkAdmin(account common.Address) bool {
|
|||
|
||||
func (s *QuorumControlsAPI) isOrgAdmin(account common.Address, orgId string) bool {
|
||||
ac := types.AcctInfoMap.GetAccount(account)
|
||||
return ac != nil && (ac.RoleId == s.permConfig.OrgAdminRole && ac.OrgId == orgId)
|
||||
return ac != nil && (ac.RoleId == s.permConfig.OrgAdminRole && strings.Contains(orgId, ac.OrgId))
|
||||
}
|
||||
|
||||
func (s *QuorumControlsAPI) checkOrgExists(orgId string) bool {
|
||||
|
@ -407,38 +408,37 @@ func (s *QuorumControlsAPI) executePermAction(action PermAction, args txArgs) Ex
|
|||
// check if anything pending approval
|
||||
tx, err = pinterf.ApproveOrg(args.orgId, args.url, args.acctId)
|
||||
|
||||
//case AddSubOrg:
|
||||
// // check if caller is network admin
|
||||
// if !s.isNetworkAdmin(args.txa.From) {
|
||||
// return ErrNotNetworkAdmin
|
||||
// }
|
||||
//
|
||||
// // check if any previous op is pending approval for network admin
|
||||
// if s.checkPendingOp(s.permConfig.NwAdminOrg, pinterf) {
|
||||
// return ErrPendingApprovals
|
||||
// }
|
||||
// // check if org already exists
|
||||
// if s.checkOrgExists(args.orgId) {
|
||||
// return ErrOrgExists
|
||||
// }
|
||||
//
|
||||
// // validate node id and
|
||||
// _, err := enode.ParseV4(args.url)
|
||||
// if err != nil {
|
||||
// return ErrInvalidNode
|
||||
// }
|
||||
//
|
||||
// // check if node already there
|
||||
// if s.checkNodeExists(args.url) {
|
||||
// return ErrNodePresent
|
||||
// }
|
||||
//
|
||||
// // check if account is already part of another org
|
||||
// if execStatus, er := s.checkOrgAdminExists(args.orgId, args.acctId); er != nil {
|
||||
// return execStatus
|
||||
// }
|
||||
//
|
||||
// tx, err = pinterf.AddOrg(args.orgId, args.url, args.acctId)
|
||||
case AddSubOrg:
|
||||
// check if caller is network admin
|
||||
if !s.isOrgAdmin(args.txa.From, args.porgId) {
|
||||
return ErrNotOrgAdmin
|
||||
}
|
||||
|
||||
// check if org already exists
|
||||
if s.checkOrgExists(args.orgId) {
|
||||
return ErrOrgExists
|
||||
}
|
||||
|
||||
// validate node id and
|
||||
if len(args.url) != 0 {
|
||||
_, err := enode.ParseV4(args.url)
|
||||
if err != nil {
|
||||
return ErrInvalidNode
|
||||
}
|
||||
// check if node already there
|
||||
if s.checkNodeExists(args.url) {
|
||||
return ErrNodePresent
|
||||
}
|
||||
}
|
||||
|
||||
// check if account is already part of another org
|
||||
if (args.acctId != common.Address{}) {
|
||||
if execStatus, er := s.checkOrgAdminExists(args.orgId, args.acctId); er != nil {
|
||||
return execStatus
|
||||
}
|
||||
}
|
||||
|
||||
tx, err = pinterf.AddSubOrg(args.porgId, args.orgId, args.url, args.acctId)
|
||||
|
||||
case UpdateOrgStatus:
|
||||
// check if called is network admin
|
||||
|
|
|
@ -3,6 +3,7 @@ package types
|
|||
import (
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/hashicorp/golang-lru"
|
||||
"math/big"
|
||||
"sync"
|
||||
)
|
||||
|
||||
|
@ -26,8 +27,11 @@ const (
|
|||
)
|
||||
|
||||
type OrgInfo struct {
|
||||
OrgId string
|
||||
Status OrgStatus
|
||||
OrgId string
|
||||
ParentOrgId string
|
||||
UltimateParent string
|
||||
Level *big.Int
|
||||
Status OrgStatus
|
||||
}
|
||||
|
||||
type NodeStatus uint8
|
||||
|
@ -174,11 +178,17 @@ func SetDefaultAccess() {
|
|||
DefaultAccess = ReadOnly
|
||||
}
|
||||
|
||||
func (o *OrgCache) UpsertOrg(orgId string, status OrgStatus) {
|
||||
func (o *OrgCache) UpsertOrg(orgId, parentOrg, ultimateParent string, level *big.Int, status OrgStatus) {
|
||||
defer o.mux.Unlock()
|
||||
o.mux.Lock()
|
||||
key := OrgKey{OrgId: orgId}
|
||||
o.c.Add(key, &OrgInfo{orgId, status})
|
||||
var key OrgKey
|
||||
if parentOrg == "" {
|
||||
key = OrgKey{OrgId: orgId}
|
||||
} else {
|
||||
key = OrgKey{OrgId: orgId + "." + parentOrg}
|
||||
}
|
||||
|
||||
o.c.Add(key, &OrgInfo{orgId, parentOrg, ultimateParent, level, status})
|
||||
}
|
||||
|
||||
func (o *OrgCache) GetOrg(orgId string) *OrgInfo {
|
||||
|
|
|
@ -756,6 +756,12 @@ web3._extend({
|
|||
call: 'quorumPermission_approveOrg',
|
||||
params: 4,
|
||||
inputFormatter: [null,null,web3._extend.formatters.inputAddressFormatter,web3._extend.formatters.inputTransactionFormatter]
|
||||
}),
|
||||
new web3._extend.Method({
|
||||
name: 'addSubOrg',
|
||||
call: 'quorumPermission_addSubOrg',
|
||||
params: 5,
|
||||
inputFormatter: [null,null,null,web3._extend.formatters.inputAddressFormatter,web3._extend.formatters.inputTransactionFormatter]
|
||||
}),
|
||||
new web3._extend.Method({
|
||||
name: 'updateOrgStatus',
|
||||
|
|
Loading…
Reference in New Issue