Skip to content

Commit 6feaa80

Browse files
committed
implement sign user exclusion
1 parent abd192f commit 6feaa80

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

user_sync/connector/connector_sign.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from ..error import AssertionException
2828
from sign_client.client import SignClient
2929
from pathlib import Path
30+
import re
3031

3132

3233
class SignConnector(object):
@@ -45,6 +46,20 @@ def __init__(self, caller_options, org_name, test_mode, connection, cache_config
4546
sign_builder.require_string_value('admin_email')
4647
self.create_users = sign_builder.require_value('create_users', bool)
4748
self.deactivate_users = sign_builder.require_value('deactivate_users', bool)
49+
50+
exclusion_config = caller_config.get_dict_config('exclusions', True)
51+
exclusion_builder = OptionsBuilder(exclusion_config)
52+
exclusion_builder.set_value('groups', list, [])
53+
exclusion_builder.set_value('users', list, [])
54+
55+
self.exclusion_options = exclusion_builder.get_options()
56+
57+
if 'users' in self.exclusion_options:
58+
compiled_rules = []
59+
for rule in self.exclusion_options['users']:
60+
compiled_rules.append(re.compile(rule))
61+
self.exclusion_options['users'] = compiled_rules
62+
4863
store_path = Path(cache_config['path'])
4964

5065
options = sign_builder.get_options()

user_sync/engine/sign.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from sign_client.error import AssertionException as ClientException
88

99
from sign_client.model import DetailedUserInfo, GroupInfo, UserGroupsInfo, UserGroupInfo, DetailedGroupInfo, UserStateInfo
10+
import re
1011

1112

1213
class SignSyncEngine:
@@ -130,6 +131,18 @@ def log_action_summary(self):
130131
for description, count in self.action_summary.items():
131132
self.logger.info(' {}: {}'.format(description.rjust(pad, ' '), count))
132133

134+
def sign_user_excluded(self, user, user_groups, connector):
135+
if 'users' in connector.exclusion_options:
136+
for rule in connector.exclusion_options['users']:
137+
if rule.match(user.email.lower()):
138+
return True
139+
if 'groups' in connector.exclusion_options:
140+
user_group_names = set([ug.name.lower() for ug in user_groups])
141+
for group in connector.exclusion_options['groups']:
142+
if group.lower() in user_group_names:
143+
return True
144+
return False
145+
133146
def update_sign_users(self, directory_users, sign_connector: SignConnector, org_name):
134147
"""
135148
Updates user details or inserts new user
@@ -139,9 +152,10 @@ def update_sign_users(self, directory_users, sign_connector: SignConnector, org_
139152
:return:
140153
"""
141154
# Fetch the list of active Sign users
142-
sign_users = {user.email: user for user in sign_connector.get_users().values() if user.status != 'INACTIVE'}
143-
inactive_sign_users = {user.email: user for user in sign_connector.get_users().values() if user.status == 'INACTIVE'}
144155
sign_user_groups = sign_connector.get_user_groups()
156+
filtered_users = {user.email: user for user in sign_connector.get_users().values() if not self.sign_user_excluded(user, sign_user_groups[user.id], sign_connector)}
157+
sign_users = {user.email: user for user in filtered_users.values() if user.status != 'INACTIVE'}
158+
inactive_sign_users = {user.email: user for user in filtered_users.values() if user.status == 'INACTIVE'}
145159
self.sign_user_primary_groups[org_name] = {id: [g for g in groups if g.isPrimaryGroup][0] for id, groups in sign_user_groups.items()}
146160
users_update_list = []
147161
user_groups_update_list = []

0 commit comments

Comments
 (0)