Пример #1
0
def run_group_syncer(user: User) -> None:
    """
    Tasks to run after User is changed.
    :param user: The user instance to sync groups for.
    """
    SynchronizeGroups.run()
    if settings.OW4_GSUITE_SYNC.get("ENABLED", False):
        ow4_gsuite_domain = settings.OW4_GSUITE_SYNC.get("DOMAIN")
        if isinstance(user, User):
            logger.debug("Running G Suite syncer for user {}".format(user))
            update_g_suite_user(ow4_gsuite_domain, user, suppress_http_errors=True)
        elif isinstance(user, Group):
            group = user
            logger.debug("Running G Suite syncer for group {}".format(group))
            update_g_suite_group(
                ow4_gsuite_domain, group.name, suppress_http_errors=True
            )
Пример #2
0
    def handle(self, *args, **kwargs):
        groups_to_sync = settings.OW4_GSUITE_SYNC.get("GROUPS")
        domain = settings.OW4_GSUITE_SYNC.get("DOMAIN")

        logger.info(
            "Starting sync of OW4 Groups' members to G Suite (domain: %s) with %s"
            % (domain, settings.OW4_GSUITE_SYNC.get("DELEGATED_ACCOUNT"))
        )
        logger.debug("Groups to be synced: %s" % groups_to_sync)

        for group in groups_to_sync:
            g_suite_users = get_g_suite_users_for_group(domain, group)
            ow4_users = get_ow4_users_for_group(group)
            logger.debug("Users in OW4: %s" % ow4_users)
            logger.debug("Users in G Suite: %s" % g_suite_users)

            should_update = False
            account_count_eq = check_amount_of_members_ow4_g_suite(
                g_suite_users, ow4_users
            )
            if not account_count_eq:
                logger.debug(
                    "Updating G Suite members since the number of members are inconsistent"
                )
                should_update = True
            else:
                logger.debug(
                    "Number of group members are equal, double checking email addresses"
                )
                should_update = not check_emails_match_each_other(
                    g_suite_users, ow4_users
                )

            if should_update:
                logger.info("Syncing %s@%s with OW4 ..." % (group, domain))
                update_g_suite_group(domain, group, g_suite_users, ow4_users)

            logger.info("%s@%s is up to date with OW4." % (group, domain))

        logger.info("Done syncing OW4 with G Suite.")