Update guest user support #1874

This commit is contained in:
Ross Scroggs
2026-04-27 19:47:49 -07:00
parent 0f50ce18b3
commit 4075bef468
5 changed files with 86 additions and 14 deletions

View File

@@ -916,6 +916,8 @@ Specify a collection of Users by directly specifying them or by specifying items
<UserTypeEntity> ::=
(all users|users_na|users_arch|users_ns|users_susp|users_arch_or_susp|users_na_ns|users_ns_susp)|
(all guests|guests_ns|guests_susp|guests_ns_susp)|
(all users_and_guests|users_and_guests_ns|users_and_guests_susp|users_and_guests_ns_susp)|
(user <UserItem>)|
(users <UserList>)|
(oauthuser)

View File

@@ -1,3 +1,10 @@
7.43.00
Updated `gam info user` to display guest user attributes: `isGuestUser, guestAccountInfo`
Expanded `<UserTypeEntity>` to allow specification of guest users.
* See [Collections of Users](Collections-of-Users)
7.42.00
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`

View File

@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
"""
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
__version__ = '7.42.00'
__version__ = '7.43.00'
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
# pylint: disable=wrong-import-position
@@ -46929,10 +46929,15 @@ USER_NAME_PROPERTY_PRINT_ORDER = [
'fullName',
'displayName',
]
USER_GUEST_PROPERTY_PRINT_ORDER = [
'primaryGuestEmail',
]
USER_LANGUAGE_PROPERTY_PRINT_ORDER = [
'languages',
]
USER_SCALAR_PROPERTY_PRINT_ORDER = [
'isGuestUser',
'guestAccountInfo',
'isAdmin',
'isDelegatedAdmin',
'isEnrolledIn2Sv',
@@ -47050,7 +47055,7 @@ USER_FIELDS_CHOICE_MAP = {
'gal': 'includeInGlobalAddressList',
'gender': ['gender.type', 'gender.customGender', 'gender.addressMeAs'],
'givenname': 'name.givenName',
'guestaccountinfo': 'guestAccountInfo',
'guestaccountinfo': ['guestAccountInfo.primaryGuestEmail'],
'id': 'id',
'im': 'ims',
'ims': 'ims',
@@ -47368,17 +47373,23 @@ def infoUsers(entityList):
Ind.Increment()
printKeyValueList(['Settings', None])
Ind.Increment()
if 'name' in user:
for up in USER_NAME_PROPERTY_PRINT_ORDER:
if up in user['name']:
printKeyValueList([UProp.PROPERTIES[up][UProp.TITLE], user['name'][up]])
up = 'name'
if up in user:
for nup in USER_NAME_PROPERTY_PRINT_ORDER:
if nup in user[up]:
printKeyValueList([UProp.PROPERTIES[nup][UProp.TITLE], user[up][nup]])
up = 'languages'
if up in user:
printKeyValueList([UProp.PROPERTIES[up][UProp.TITLE], _formatLanguagesList(user[up], ',')])
for up in USER_SCALAR_PROPERTY_PRINT_ORDER:
if up in user:
if up not in USER_TIME_OBJECTS:
printKeyValueList([UProp.PROPERTIES[up][UProp.TITLE], user[up]])
if up != 'guestAccountInfo':
printKeyValueList([UProp.PROPERTIES[up][UProp.TITLE], user[up]])
else:
for gup in USER_GUEST_PROPERTY_PRINT_ORDER:
if gup in user[up]:
printKeyValueList([UProp.PROPERTIES[gup][UProp.TITLE], user[up][gup]])
else:
printKeyValueList([UProp.PROPERTIES[up][UProp.TITLE], formatLocalTime(user[up])])
Ind.Decrement()

View File

@@ -114,6 +114,14 @@ class GamCLArgs():
ENTITY_USERS_NA_NS = 'users_na_ns'
ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
ENTITY_USERS_AND_GUESTS = 'users_and_guests'
ENTITY_USERS_AND_GUESTS_NS = 'users_and_guests_ns'
ENTITY_USERS_AND_GUESTS_SUSP = 'users_and_guests_susp'
ENTITY_USERS_AND_GUESTS_NS_SUSP = 'users_and_guests_ns_susp'
ENTITY_GUESTS = 'guests'
ENTITY_GUESTS_NS = 'guests_ns'
ENTITY_GUESTS_SUSP = 'guests_susp'
ENTITY_GUESTS_NS_SUSP = 'guests_ns_susp'
#
BROWSER_ENTITIES = [
ENTITY_BROWSER,
@@ -398,6 +406,14 @@ class GamCLArgs():
ENTITY_USERS_ARCH_OR_SUSP,
ENTITY_USERS_NA_NS,
ENTITY_USERS_NS_SUSP,
ENTITY_USERS_AND_GUESTS,
ENTITY_USERS_AND_GUESTS_NS,
ENTITY_USERS_AND_GUESTS_SUSP,
ENTITY_USERS_AND_GUESTS_NS_SUSP,
ENTITY_GUESTS,
ENTITY_GUESTS_NS,
ENTITY_GUESTS_SUSP,
ENTITY_GUESTS_NS_SUSP,
]
#
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
@@ -409,6 +425,14 @@ class GamCLArgs():
ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
ENTITY_ALL_USERS_AND_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS
ENTITY_ALL_USERS_AND_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS
ENTITY_ALL_USERS_AND_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_SUSP
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS_SUSP
ENTITY_ALL_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS
ENTITY_ALL_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_NS
ENTITY_ALL_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_SUSP
ENTITY_ALL_GUESTS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_NS_SUSP
#
ALL_USER_ENTITY_TYPES = {
ENTITY_ALL_USERS,
@@ -418,6 +442,14 @@ class GamCLArgs():
ENTITY_ALL_USERS_SUSP,
ENTITY_ALL_USERS_NA_NS,
ENTITY_ALL_USERS_NS_SUSP,
ENTITY_ALL_USERS_AND_GUESTS,
ENTITY_ALL_USERS_AND_GUESTS_NS,
ENTITY_ALL_USERS_AND_GUESTS_SUSP,
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP,
ENTITY_ALL_GUESTS,
ENTITY_ALL_GUESTS_NS,
ENTITY_ALL_GUESTS_SUSP,
ENTITY_ALL_GUESTS_NS_SUSP,
}
DOMAIN_ENTITY_TYPES = {
ENTITY_DOMAINS,
@@ -534,13 +566,21 @@ class GamCLArgs():
}
#
ALL_USERS_QUERY_MAP = {
ENTITY_ALL_USERS: 'isSuspended=False',
ENTITY_ALL_USERS_NA: 'isArchived=False',
ENTITY_ALL_USERS_ARCH: 'isArchived=True',
ENTITY_ALL_USERS_NS: 'isSuspended=False',
ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False',
ENTITY_ALL_USERS_NS_SUSP: None,
ENTITY_ALL_USERS: 'isSuspended=False isGuest=False',
ENTITY_ALL_USERS_NA: 'isArchived=False isGuest=False',
ENTITY_ALL_USERS_ARCH: 'isArchived=True isGuest=False',
ENTITY_ALL_USERS_NS: 'isSuspended=False isGuest=False',
ENTITY_ALL_USERS_SUSP: 'isSuspended=True isGuest=False',
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False isGuest=False',
ENTITY_ALL_USERS_NS_SUSP: 'isGuest=False',
ENTITY_ALL_USERS_AND_GUESTS: 'isSuspended=False',
ENTITY_ALL_USERS_AND_GUESTS_NS: 'isSuspended=False',
ENTITY_ALL_USERS_AND_GUESTS_SUSP: 'isSuspended=True',
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP: None,
ENTITY_ALL_GUESTS: 'isSuspended=False isGuest=True',
ENTITY_ALL_GUESTS_NS: 'isSuspended=False isGuest=True',
ENTITY_ALL_GUESTS_SUSP: 'isSuspended=True isGuest=True',
ENTITY_ALL_GUESTS_NS_SUSP: 'isGuest=True',
}
DOMAINS_QUERY_MAP = {
ENTITY_DOMAINS: None,
@@ -602,6 +642,14 @@ class GamCLArgs():
ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
ENTITY_USERS_AND_GUESTS: ENTITY_ALL_USERS_AND_GUESTS,
ENTITY_USERS_AND_GUESTS_NS: ENTITY_ALL_USERS_AND_GUESTS_NS,
ENTITY_USERS_AND_GUESTS_SUSP: ENTITY_ALL_USERS_AND_GUESTS_SUSP,
ENTITY_USERS_AND_GUESTS_NS_SUSP: ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP,
ENTITY_GUESTS: ENTITY_ALL_GUESTS,
ENTITY_GUESTS_NS: ENTITY_ALL_GUESTS_NS,
ENTITY_GUESTS_SUSP: ENTITY_ALL_GUESTS_SUSP,
ENTITY_GUESTS_NS_SUSP: ENTITY_ALL_GUESTS_NS_SUSP,
}
# Allowed values for CL source selector datafile, csvkmd
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [

View File

@@ -117,6 +117,8 @@ PROPERTIES = {
{CLASS: PC_STRING, TITLE: 'Full Name',},
'displayName':
{CLASS: PC_STRING, TITLE: 'Display Name',},
'primaryGuestEmail':
{CLASS: PC_STRING, TITLE: 'Primary Guest Email',},
'languages':
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
'languageCode':
@@ -131,6 +133,8 @@ PROPERTIES = {
{CLASS: PC_BOOLEAN, TITLE: 'Is a Super Admin',},
'isDelegatedAdmin':
{CLASS: PC_BOOLEAN, TITLE: 'Is Delegated Admin',},
'isGuestUser':
{CLASS: PC_BOOLEAN, TITLE: 'Is a Guest User',},
'isEnrolledIn2Sv':
{CLASS: PC_BOOLEAN, TITLE: '2-step enrolled',},
'isEnforcedIn2Sv':