예제 #1
0
def _gadmin_group_delete(message: Message, service: Resource,
                         group: str) -> None:
    """
    指定したグループを削除する

    :param service: Google API との接続
    :param group: グループのメールアドレス
    """
    try:
        result = service.groups().get(groupKey=group).execute()
        count = result["directMembersCount"]
        if count != "0":
            # メンバーがいる場合は削除できない
            botsend(
                message,
                f"""
`{group}` グループはメンバーがいるので削除できません
`$gadmin member delete {group} メールアドレス` コマンドでメンバーを削除してから実行してください
`$gadmin member list {group}` コマンドでメンバー一覧が確認できます
""",
            )
        else:
            service.groups().delete(groupKey=group).execute()
            botsend(message, f"`{group}` グループを削除しました")
    except HttpError as e:
        botsend(message, f"グループの削除に失敗しました\n`{e}`")
        return
예제 #2
0
def get_all_groups_for_email(admin: Resource, email: str) -> List[Dict]:
    """ Fetch all groups of which the given group is a member

    Arguments:
        email: A string representing the email address for the group

    Returns a list of Group models
    Throws GoogleException
    """
    request = admin.groups().list(userKey=email, maxResults=500)
    groups: List[Dict] = []
    while request is not None:
        resp = request.execute(num_retries=GOOGLE_API_NUM_RETRIES)
        groups = groups + resp.get('groups', [])
        request = admin.groups().list_next(request, resp)
    return groups
예제 #3
0
def get_all_groups(admin: Resource) -> List[Dict]:
    """
    Return list of Google Groups in your organization
    Returns empty list if we are unable to enumerate the groups for any reasons

    googleapiclient.discovery.build('admin', 'directory_v1', credentials=credentials, cache_discovery=False)

    :param admin: google's apiclient discovery resource object.  From googleapiclient.discovery.build
    See https://googleapis.github.io/google-api-python-client/docs/epy/googleapiclient.discovery-module.html#build.
    :return: List of Google groups in domain
    """
    request = admin.groups().list(customer='my_customer',
                                  maxResults=20,
                                  orderBy='email')
    response_objects = []
    while request is not None:
        resp = request.execute(num_retries=GOOGLE_API_NUM_RETRIES)
        response_objects.append(resp)
        request = admin.groups().list_next(request, resp)
    return response_objects
예제 #4
0
def _gadmin_group_insert(message: Message, service: Resource, group: str,
                         name: str) -> None:
    """
    指定したグループを追加する

    :param service: Google API との接続
    :param group: グループのメールアドレス
    :param name: グループの名前
    """
    body = {
        "name": name,
        "email": group,
    }
    try:
        service.groups().insert(body=body).execute()
    except HttpError as e:
        botsend(message, f"グループの追加に失敗しました\n`{e}`")
        return
    botsend(message, f"`{group}` グループを追加しました")
    botsend(message,
            f"`$gadmin member insert {group} メールアドレス` コマンドでメンバーを追加してください")