Chat Admin APIs DevPreview

This commit is contained in:
Jay Lee
2024-06-04 17:50:30 +00:00
parent 6c3a805a4d
commit cb16747125
5 changed files with 4829 additions and 29 deletions

View File

@@ -5973,6 +5973,7 @@ gam <UserTypeEntity> update chatspace <ChatSpace>
[history <Boolean>])
[formatjson]
gam <UserTypeEntity> delete chatspace <ChatSpace>
[adminaccess|asadmin]
gam <UserTypeEntity> info chatspace <ChatSpace>
[formatjson]
@@ -5984,16 +5985,20 @@ gam <UserTypeEntity> show chatspaces
gam <UserTypeEntity> print chatspaces [todrive <ToDriveAttribute>*]
[types <ChatSpaceTypeList>]
[formatjson [quotechar <Character>]]
[adminaccess|asadmin]
gam <UserTypeEntity> create chatmember <ChatSpace>
[type human|bot] [role member|manager]
(user <UserItem>)* (members <UserTypeEntity>)*
(group <GroupItem>)* (groups <GroupEntity>)*
[formatjson|returnidonly]
[adminaccess|asadmin]
gam <UserTypeEntity> delete chatmember <ChatSpace>
((user <UserItem>)|(members <UserTypeEntity>)|
(group <GroupItem>)|(groups <GroupEntity>))+
[adminaccess|asadmin]
gam <UserTypeEntity> remove chatmember members <ChatMemberList>
[adminaccess|asadmin]
gam <UserTypeEntity> update chatmember <ChatSpace>
role member|manager
((user <UserItem>)|(members <UserTypeEntity>))+
@@ -6006,9 +6011,11 @@ gam <UserTypeEntity> info chatmember members <ChatMemberList>
gam <UserTypeEntity> show chatmembers <ChatSpace>
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
[formatjson]
[adminaccess|asadmin]
gam <UserTypeEntity> print chatmembers [todrive <ToDriveAttribute>*] <ChatSpace>
[showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
[formatjson [quotechar <Character>]]
[adminaccess|asadmin]
gam <UserTypeEntity> create chatmessage <ChatSpace>
<ChatContent>

View File

@@ -11,6 +11,7 @@ datas = []
for pkg in GAM_VER_LIBS:
datas += copy_metadata(pkg, recursive=True)
datas += [('cbcm-v1.1beta1.json', '.')]
datas += [('chat-v1.json', '.')]
datas += [('contactdelegation-v1.json', '.')]
datas += [('admin-directory_v1.1beta1.json', '.')]
datas += [('cacerts.pem', '.')]

View File

@@ -25411,12 +25411,18 @@ def updateChatSpace(users):
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
# gam <UserTypeEntity> delete chatspace <ChatSpace>
# [adminaccess|asadmin]
def deleteChatSpace(users):
name = None
useAdminAccess = None
api = API.CHAT_SPACES_DELETE
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if myarg == 'space' or myarg.startswith('spaces/') or myarg.startswith('space/'):
name = getChatSpace(myarg)
elif myarg in ADMIN_ACCESS_OPTIONS:
useAdminAccess = True
api = API.CHAT_ADMIN_DELETE
else:
unknownArgumentExit()
if not name:
@@ -25424,11 +25430,12 @@ def deleteChatSpace(users):
i, count, users = getEntityArgument(users)
for user in users:
i += 1
user, chat, kvList = buildChatServiceObject(API.CHAT_SPACES_DELETE, user, i, count, [Ent.CHAT_SPACE, name])
user, chat, kvList = buildChatServiceObject(api, user, i, count, [Ent.CHAT_SPACE, name])
if not chat:
continue
try:
callGAPI(chat.spaces(), 'delete',
useAdminAccess=useAdminAccess,
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
name=name)
entityActionPerformed(kvList, i, count)
@@ -25511,14 +25518,14 @@ def printShowChatSpaces(users):
OBY = OrderBy(CHAT_SPACES_ADMIN_ORDERBY_CHOICE_MAP)
pfilter = ''
kwargs = {}
if not useAdminAccess:
api = API.CHAT_SPACES
function = 'list'
else:
if useAdminAccess:
api = API.CHAT_SPACES_ADMIN
function = 'search'
kwargs['useAdminAccess'] = True
kwargs['query'] = 'customer = "customers/my_customer" AND spaceType = "SPACE"'
else:
api = API.CHAT_SPACES
function = 'list'
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if csvPF and myarg == 'todrive':
@@ -25593,7 +25600,7 @@ def _getChatMemberEmail(cd, member):
# [type human|bot] [role member|manager]
# (user <UserItem>)* (members <UserTypeEntity>)*
# (group <GroupItem>)* (groups <GroupEntity>)*
# [formatjson|returnidonly]
# [adminaccess|asadmin] [formatjson|returnidonly]
def createChatMember(users):
def addMembers(members, field, entityType, i, count):
jcount = len(members)
@@ -25608,11 +25615,13 @@ def createChatMember(users):
kvList[-1] = body[field]['name']
try:
member = callGAPI(chat.spaces().members(), 'create',
useAdminAccess=useAdminAccess,
bailOnInternalError=True,
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.NOT_FOUND, GAPI.INVALID, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.INTERNAL_ERROR],
parent=parent, body=body)
if role != 'ROLE_MEMBER' and entityType == Ent.CHAT_MANAGER_USER:
member = callGAPI(chat.spaces().members(), 'patch',
useAdminAccess=useAdminAccess,
bailOnInternalError=True,
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.INTERNAL_ERROR],
name=member['name'], updateMask='role', body={'role': role})
@@ -25638,6 +25647,8 @@ def createChatMember(users):
userList = []
groupList = []
returnIdOnly = False
useAdminAccess = None
api = API.CHAT_MEMBERSHIPS
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if myarg == 'space' or myarg.startswith('spaces/') or myarg.startswith('space/'):
@@ -25657,6 +25668,9 @@ def createChatMember(users):
mtype = getChoice(CHAT_MEMBER_TYPE_MAP, mapChoice=True)
elif myarg == 'returnidonly':
returnIdOnly = True
elif myarg in ADMIN_ACCESS_OPTIONS:
useAdminAccess = True
api = API.CHAT_MEMBERSHIPS_ADMIN
else:
FJQC.GetFormatJSON(myarg)
if not parent:
@@ -25675,7 +25689,7 @@ def createChatMember(users):
i, count, users = getEntityArgument(users)
for user in users:
i += 1
user, chat, kvList = buildChatServiceObject(API.CHAT_MEMBERSHIPS, user, i, count, [Ent.CHAT_SPACE, parent])
user, chat, kvList = buildChatServiceObject(api, user, i, count, [Ent.CHAT_SPACE, parent])
if not chat:
continue
Ind.Increment()
@@ -25685,13 +25699,14 @@ def createChatMember(users):
addMembers(groupMembers, 'groupMember', Ent.CHAT_MEMBER_GROUP, i, count)
Ind.Decrement()
def _deleteChatMembers(chat, kvList, jcount, memberNames, i, count):
def _deleteChatMembers(chat, kvList, jcount, memberNames, i, count, useAdminAccess=None):
j = 0
for name in memberNames:
j += 1
kvList[-1] = name
try:
callGAPI(chat.spaces().members(), 'delete',
useAdminAccess=useAdminAccess,
bailOnInternalError=True,
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.INTERNAL_ERROR],
name=name)
@@ -25704,6 +25719,7 @@ def _deleteChatMembers(chat, kvList, jcount, memberNames, i, count):
# gam <UserTypeEntity> delete chatmember <ChatSpace>
# ((user <UserItem>)|(members <UserTypeEntity>)|
# (group <GroupItem>)|(groups <GroupEntity>))+
# [adminaccess|asadmin]
# gam <UserTypeEntity> remove chatmember members <ChatMemberList>
# gam <UserTypeEntity> update chatmember <ChatSpace>
# role member|manager
@@ -25720,6 +25736,8 @@ def deleteUpdateChatMember(users):
body = {}
memberNames = []
userGroupList = []
useAdminAccess = None
api = API.CHAT_MEMBERSHIPS
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if action in {Act.UPDATE, Act.MODIFY} and myarg == 'role':
@@ -25742,6 +25760,9 @@ def deleteUpdateChatMember(users):
userGroupList.append(getEmailAddress(returnUIDprefix='uid:'))
elif deleteMode and myarg == 'groups':
userGroupList.extend(getEntityList(Cmd.OB_GROUP_ENTITY))
elif myarg in ADMIN_ACCESS_OPTIONS:
useAdminAccess = True
api = API.CHAT_MEMBERSHIPS_ADMIN
else:
unknownArgumentExit()
if not deleteMode and 'role' not in body:
@@ -25760,7 +25781,7 @@ def deleteUpdateChatMember(users):
i, count, users = getEntityArgument(users)
for user in users:
i += 1
user, chat, kvList = buildChatServiceObject(API.CHAT_MEMBERSHIPS, user, i, count, [Ent.CHAT_SPACE, parent] if parent is not None else None)
user, chat, kvList = buildChatServiceObject(api, user, i, count, [Ent.CHAT_SPACE, parent] if parent is not None else None)
if not chat:
continue
jcount = len(memberNames)
@@ -25768,7 +25789,7 @@ def deleteUpdateChatMember(users):
kvList.extend([Ent.CHAT_MEMBER, ''])
Ind.Increment()
if deleteMode:
_deleteChatMembers(chat, kvList, jcount, memberNames, i, count)
_deleteChatMembers(chat, kvList, jcount, memberNames, i, count, useAdminAccess=useAdminAccess)
else:
j = 0
for name in memberNames:
@@ -25992,16 +26013,18 @@ def doInfoChatMember():
# gam [<UserTypeEntity>] show chatmembers <ChatSpace>
# [showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
# [formatjson]
# [formatjson] [adminaccess|asadmin]
# gam [<UserTypeEntity>] print chatmembers [todrive <ToDriveAttribute>*] <ChatSpace>
# [showinvited [<Boolean>]] [showgroups [<Boolean>]] [filter <String>]
# [formatjson [quotechar <Character>]]
# [formatjson [quotechar <Character>]] [adminaccess|asadmin]
def printShowChatMembers(users):
cd = buildGAPIObject(API.DIRECTORY)
csvPF = CSVPrintFile(['User', 'space.name', 'name'] if not isinstance(users, list) else ['space.name', 'name']) if Act.csvFormat() else None
FJQC = FormatJSONQuoteChar(csvPF)
kwargs = {}
parent = None
api = API.CHAT_MEMBERSHIPS
useAdminAccess = None
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if csvPF and myarg == 'todrive':
@@ -26014,21 +26037,29 @@ def printShowChatMembers(users):
kwargs['showGroups'] = getBoolean()
elif myarg =='filter':
kwargs['filter'] = getString(Cmd.OB_STRING)
elif myarg in ADMIN_ACCESS_OPTIONS:
useAdminAccess = True
api = API.CHAT_MEMBERSHIPS_ADMIN
else:
FJQC.GetFormatJSONQuoteChar(myarg, True)
if not parent:
missingArgumentExit('space')
if useAdminAccess and 'filter' in kwargs:
invalidArgumentExit('asadmin not compatible with filter')
elif useAdminAccess:
kwargs['filter'] = 'member.type != "BOT'
qfilter = f'{Ent.Singular(Ent.CHAT_SPACE)}: {parent}'
if 'filter' in kwargs:
qfilter += f', {kwargs["filter"]}'
i, count, users = getEntityArgument(users)
for user in users:
i += 1
user, chat, kvList = buildChatServiceObject(API.CHAT_MEMBERSHIPS, user, i, count, [Ent.CHAT_SPACE, parent])
user, chat, kvList = buildChatServiceObject(api, user, i, count, [Ent.CHAT_SPACE, parent])
if not chat:
continue
try:
members = callGAPIpages(chat.spaces().members(), 'list', 'memberships',
useAdminAccess=useAdminAccess,
pageMessage=_getChatPageMessage(Ent.CHAT_MEMBER, user, i, count, qfilter),
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
pageSize=CHAT_PAGE_SIZE, parent=parent, **kwargs)

4755
src/gam/chat-v1.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -33,6 +33,7 @@ CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
CHAT_MESSAGES = 'chatmessages'
CHAT_SPACES = 'chatspaces'
CHAT_SPACES_ADMIN = 'chatspacesadmin'
CHAT_ADMIN_DELETE = 'chatadmindelete'
CHAT_SPACES_DELETE = 'chatspacesdelete'
CHROMEMANAGEMENT = 'chromemanagement'
CHROMEMANAGEMENT_APPDETAILS = 'chromemanagementappdetails'
@@ -196,14 +197,15 @@ _INFO = {
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True},
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Admin Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT_MESSAGES: {'name': 'Chat API - Messages', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT_SPACES: {'name': 'Chat API - Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT_SPACES_ADMIN: {'name': 'Chat API - Admin Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT_SPACES_DELETE: {'name': 'Chat API - Spaces Delete', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
CHAT_ADMIN_DELETE: {'name': 'Chat API - Admin Delete', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Admin Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_MESSAGES: {'name': 'Chat API - Messages', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_SPACES: {'name': 'Chat API - Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_SPACES_ADMIN: {'name': 'Chat API - Admin Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CHAT_SPACES_DELETE: {'name': 'Chat API - Spaces Delete', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT, 'localjson': True},
CLASSROOM: {'name': 'Classroom API', 'version': 'v1', 'v2discovery': True},
CHROMEMANAGEMENT: {'name': 'Chrome Management API', 'version': 'v1', 'v2discovery': True},
CHROMEMANAGEMENT_APPDETAILS: {'name': 'Chrome Management API - AppDetails', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
@@ -518,10 +520,10 @@ _SVCACCT_SCOPES = [
'api': CHAT_MEMBERSHIPS,
'subscopes': READONLY,
'scope': 'https://www.googleapis.com/auth/chat.memberships'},
# {'name': 'Chat API - Admin Memberships',
# 'api': CHAT_MEMBERSHIPS_ADMIN,
# 'subscopes': READONLY,
# 'scope': 'https://www.googleapis.com/auth/chat.admin.memberships'},
{'name': 'Chat API - Admin Memberships',
'api': CHAT_MEMBERSHIPS_ADMIN,
'subscopes': READONLY,
'scope': 'https://www.googleapis.com/auth/chat.admin.memberships'},
{'name': 'Chat API - Messages',
'api': CHAT_MESSAGES,
'subscopes': READONLY,
@@ -530,14 +532,18 @@ _SVCACCT_SCOPES = [
'api': CHAT_SPACES,
'subscopes': READONLY,
'scope': 'https://www.googleapis.com/auth/chat.spaces'},
# {'name': 'Chat API - Admin Spaces',
# 'api': CHAT_SPACES_ADMIN,
# 'subscopes': READONLY,
# 'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
{'name': 'Chat API - Admin Spaces',
'api': CHAT_SPACES_ADMIN,
'subscopes': READONLY,
'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
{'name': 'Chat API - Spaces Delete',
'api': CHAT_SPACES_DELETE,
'subscopes': [],
'scope': 'https://www.googleapis.com/auth/chat.delete'},
{'name': 'Chat API - Admin Delete',
'api': CHAT_ADMIN_DELETE,
'subscopes': [],
'scope': 'https://www.googleapis.com/auth/chat.admin.delete'},
{'name': 'Classroom API - Course Announcements',
'api': CLASSROOM,
'subscopes': READONLY,