(scim_url, token,
keeper_users,
external_users,
dry_run=False)
| 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 |
no test coverage detected