mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-28 01:41:36 +00:00
Chat Admin APIs DevPreview
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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', '.')]
|
||||
|
||||
@@ -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
4755
src/gam/chat-v1.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user