MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / sync_users

Method sync_users

keepercommander/commands/scim.py:582–684  ·  view source on GitHub ↗
(scim_url, token,
                   keeper_users,
                   external_users,
                   dry_run=False)

Source from the content-addressed store, hash-verified

580
581 @staticmethod
582 def sync_users(scim_url, token,
583 keeper_users,
584 external_users,
585 dry_run=False): # type: (str, str, Dict[str, ScimUser], Dict[str, ScimUser], bool) -> None
586 keeper_user_copy = keeper_users.copy()
587 external_user_copy = external_users.copy()
588 for match_round in range(1): # 0 - email
589 if len(keeper_user_copy) == 0 or len(external_user_copy) == 0:
590 break
591 if match_round == 0:
592 user_lookup = {x.email.casefold(): x for x in keeper_user_copy.values()} # type: Dict[str, ScimUser]
593 else:
594 continue
595
596 for user_id in list(external_user_copy.keys()):
597 user = external_user_copy[user_id]
598 if match_round == 0:
599 key = user.email.casefold()
600 else:
601 continue
602 if key in user_lookup:
603 keeper_user = user_lookup[key]
604 op = {
605 'op': 'replace',
606 'value': {}
607 }
608 if keeper_user.external_id != user.id:
609 op['value']['externalId'] = user.id
610 if keeper_user.full_name != user.full_name:
611 op['value']['displayName'] = user.full_name
612 if keeper_user.last_name != user.last_name:
613 op['value']['name.familyName'] = user.last_name
614 if keeper_user.first_name != user.first_name:
615 op['value']['name.givenName'] = user.first_name
616 if keeper_user.active != user.active:
617 op['value']['active'] = user.active
618
619 if len(op['value']) > 0:
620 payload = {
621 'schemas': ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],
622 'Operations': [op]
623 }
624 try:
625 ScimPushCommand.patch_scim_resource(
626 f'{scim_url}/Users', keeper_user.id, token, payload, dry_run)
627 keeper_user.external_id = user.id
628 keeper_user.full_name = user.full_name
629 keeper_user.first_name = user.first_name
630 keeper_user.last_name = user.last_name
631 keeper_user.active = user.active
632 logging.info('SCIM updated user "%s"', user.email)
633 except Exception as e:
634 logging.warning('PATCH user "%s" error: %s', user.email, e)
635
636 del keeper_user_copy[keeper_user.id]
637 del external_user_copy[user.id]
638
639 if len(external_user_copy) > 0: # add users

Callers 1

executeMethod · 0.95

Calls 8

ScimUserClass · 0.85
patch_scim_resourceMethod · 0.80
warningMethod · 0.80
post_scim_resourceMethod · 0.80
getMethod · 0.80
delete_scim_resourceMethod · 0.80
infoMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected