Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion keepercommander/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@
# Contact: commander@keepersecurity.com
#

__version__ = '18.0.14'
__version__ = '18.0.15'
18 changes: 12 additions & 6 deletions keepercommander/commands/pedm/pedm_aram.py
Original file line number Diff line number Diff line change
Expand Up @@ -461,23 +461,29 @@ def execute(self, context: KeeperParams, **kwargs) -> Any:
status_info = None
if isinstance(status, int):
if status == NotificationCenter_pb2.NotificationApprovalStatus.NAS_APPROVED:
status_info = '"Approved"'
status_info = 'Approved'
elif status == NotificationCenter_pb2.NotificationApprovalStatus.NAS_DENIED:
status_info = '"Denied"'
status_info = 'Denied'
if status_info:
event['request_status'] = status_info
if 'evaluation_status' in event:
status = event['evaluation_status']
status_info = None
if isinstance(status, int):
if status == 1:
status_info = '"Allowed"'
status_info = 'Allowed'
elif status == 2:
status_info = '"Denied"'
status_info = 'Denied'
elif status == 3:
status_info = '"Denied - Failed MFA"'
status_info = 'Denied - Failed MFA'
elif status == 4:
status_info = '"Denied - Failed Justification"'
status_info = 'Denied - Failed Justification'
elif status == 5:
status_info = 'Denied - Failed Approval'
elif status == 6:
status_info = 'Denied - Operator Approval'
elif status == 7:
status_info = 'Denied - Custom Controls'
if status_info:
event['evaluation_status'] = status_info
if hash_fields:
Expand Down
32 changes: 27 additions & 5 deletions keepercommander/enterprise.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,10 @@ def load(self, params): # type: (KeeperParams) -> None
if not rs.hasMore:
break
if proto.MANAGED_NODES in entities:
self.load_missing_role_keys(params)
try:
self.load_missing_role_keys(params)
except:
pass
if not entities.isdisjoint([proto.MANAGED_NODES, proto.NODES, proto.ROLE_USERS]):
if 'user_root_nodes' in params.enterprise:
del params.enterprise['user_root_nodes']
Expand All @@ -222,15 +225,34 @@ def load_missing_role_keys(params): # type: (KeeperParams) -> None
if 'managed_nodes' in params.enterprise:
for mn in params.enterprise['managed_nodes']:
nodes.add(mn['role_id'])

enterprise_user_id = 0
if len(nodes) > 0:
if 'users' in params.enterprise:
enterprise_user_id = next((x.get('enterprise_user_id') for x in params.enterprise['users'] if x.get('username') == params.user), 0)
if 'role_users' in params.enterprise:
role_users = {x.get('role_id') for x in params.enterprise['role_users'] if x.get('enterprise_user_id') == enterprise_user_id}
nodes.intersection_update(role_users)
if len(nodes) > 0:
if 'role_privileges' in params.enterprise:
user_node = next((x.get('enterprise_user_id') for x in params.enterprise['users'] if x.get('username') == params.user))
roles_privileges = set()
for rp in params.enterprise['role_privileges']:
privilege = rp.get('privilege')
if privilege == 'manage_roles':
role_id = rp.get('role_id')
if role_id in nodes:
roles_privileges.add(role_id)
nodes.intersection_update(roles_privileges)
if len(nodes) > 0:
roles = set()
role_keys = set()
if 'role_keys' in params.enterprise:
for rk in params.enterprise['role_keys']:
roles.add(rk['role_id'])
role_keys.add(rk['role_id'])
if 'role_keys2' in params.enterprise:
for rk in params.enterprise['role_keys2']:
roles.add(rk['role_id'])
nodes.difference_update(roles)
role_keys.add(rk['role_id'])
nodes.difference_update(role_keys)
if len(nodes) > 0:
rq = proto.GetEnterpriseDataKeysRequest()
rq.roleId.extend(nodes)
Expand Down
Loading