mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-18 13:11:37 +00:00
Compare commits
10 Commits
20250330.1
...
v7.06.00
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
117eec1cfd | ||
|
|
c460c48289 | ||
|
|
57f6a8745b | ||
|
|
2bf9c7b0d4 | ||
|
|
cbd368e3a6 | ||
|
|
45db6b5989 | ||
|
|
f1d2223517 | ||
|
|
0a3e00df80 | ||
|
|
c81121df58 | ||
|
|
defac7d9a8 |
14
.github/workflows/build.yml
vendored
14
.github/workflows/build.yml
vendored
@@ -130,7 +130,7 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
cache.tar.xz
|
||||
key: gam-${{ matrix.jid }}-20250204
|
||||
key: gam-${{ matrix.jid }}-20250408
|
||||
|
||||
- name: Untar Cache archive
|
||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||
@@ -607,9 +607,11 @@ jobs:
|
||||
# arm64 needs to build a wheel and needs scons to build
|
||||
sudo apt-get -qq --yes install scons
|
||||
"${PYTHON}" -m pip install --upgrade patchelf-wrapper
|
||||
"${PYTHON}" -m pip install --upgrade staticx
|
||||
# "${PYTHON}" -m pip install --upgrade staticx
|
||||
# install latest github src for staticx
|
||||
"${PYTHON}" -m pip install --upgrade "git+https://github.com/JonathonReinhart/staticx"
|
||||
|
||||
- name: Make StaticX
|
||||
- name: Make StaticX GAM build
|
||||
if: matrix.staticx == 'yes'
|
||||
run: |
|
||||
case $RUNNER_ARCH in
|
||||
@@ -821,9 +823,9 @@ jobs:
|
||||
|
||||
# cleanup old runs
|
||||
$gam config enable_dasa false save
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultholds || if [ $? != 55 ]; then exit $?; fi | $gam csv - gam delete vaulthold "id:~~holdId~~" matter "id:~~matterId~~"
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${HID}_" print vaultmatters matterstate OPEN | $gam csv - gam update vaultmatter "id:~~matterId~~" action close
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${HID}_" print vaultmatters matterstate CLOSED | $gam csv - gam update vaultmatter "id:~~matterId~~" action delete
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultholds | $gam csv - gam delete vaulthold "id:~~holdId~~" matter "id:~~matterId~~" || if [ $? != 55 ]; then exit $?; fi
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultmatters matterstate OPEN | $gam csv - gam update vaultmatter "id:~~matterId~~" action close
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultmatters matterstate CLOSED | $gam csv - gam update vaultmatter "id:~~matterId~~" action delete
|
||||
$gam config csv_output_row_filter "Emails.1.address:regex:^gha_test-${JID}_" print contacts | $gam csv - gam delete contact ~ContactID
|
||||
$gam config enable_dasa true save
|
||||
$gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print features | $gam csv - gam delete feature ~name
|
||||
|
||||
@@ -353,6 +353,9 @@ If an item contains spaces, it should be surrounded by ".
|
||||
now|today
|
||||
<RegularExpression> ::= <String>
|
||||
See: https://docs.python.org/3/library/re.html
|
||||
<REMatchPattern> ::= <RegularExpression>
|
||||
<RESearchPattern> ::= <RegularExpression>
|
||||
<RESubstitution> ::= <String>>
|
||||
<ProjectID> ::= <String>
|
||||
Must match this Python Regular Expression: [a-z][a-z0-9-]{4,28}[a-z0-9]
|
||||
<ServiceAccountName> ::= <String>
|
||||
@@ -817,7 +820,7 @@ Specify a collection of ChromeOS devices by directly specifying them or by speci
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||
[delimiter <Character>])|
|
||||
(croscsvfile_sn
|
||||
((<FileName>(:<FieldName>)+ [charset <Charset>] )|
|
||||
@@ -827,7 +830,7 @@ Specify a collection of ChromeOS devices by directly specifying them or by speci
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||
[delimiter <Character>])|
|
||||
(datafile
|
||||
cros|cros_sn|cros_ous|cros_ous_and_children
|
||||
@@ -844,7 +847,7 @@ Specify a collection of ChromeOS devices by directly specifying them or by speci
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[delimiter <Character>])|
|
||||
(csvkmd
|
||||
cros|cros_sn|cros_ous|cros_ous_and_children
|
||||
@@ -854,9 +857,9 @@ Specify a collection of ChromeOS devices by directly specifying them or by speci
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
keyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]])
|
||||
(croscsvdata <FieldName>(:<FieldName>*))
|
||||
|
||||
@@ -903,7 +906,7 @@ Specify a collection of Users by directly specifying them or by specifiying item
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[delimiter <Character>])|
|
||||
(datafile
|
||||
users|groups|groups_ns|groups_susp|groups_inde|ous|ous_ns|ous_susp|
|
||||
@@ -924,7 +927,7 @@ Specify a collection of Users by directly specifying them or by specifiying item
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[delimiter <Character>])|
|
||||
(csvkmd
|
||||
users|groups|groups_ns|groups_susp|groups_inde|ous|ous_ns|ous_susp|
|
||||
@@ -936,9 +939,9 @@ Specify a collection of Users by directly specifying them or by specifiying item
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
keyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]])
|
||||
(csvdata <FieldName>(:<FieldName>*))
|
||||
|
||||
@@ -970,7 +973,7 @@ Specify a collection of items by directly specifying them; the item type is dete
|
||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[endcsv|(fields <FieldNameList>)]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[delimiter <Character>]
|
||||
|
||||
<CSVkmdSelector> ::=
|
||||
@@ -984,9 +987,9 @@ Specify a collection of items by directly specifying them; the item type is dete
|
||||
(gcscsv <StorageBucketObjectName>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||
keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
keyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||
subkeyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
||||
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]]
|
||||
<CSVSubkeySelector> ::= csvsubkey <FieldName>
|
||||
<CSVDataSelector> ::= csvdata <FieldName>(:<FieldName>)*
|
||||
@@ -1324,13 +1327,13 @@ gam tbatch <BatchContent> [showcmds [<Boolean>]]
|
||||
|
||||
gam csv <CSVLoopContent> [warnifnodata]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)* [showcmds [<Boolean>]]
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)* [showcmds [<Boolean>]]
|
||||
[skiprows <Integer>] [maxrows <Integer>]
|
||||
gam <GAMArgumentList>
|
||||
|
||||
gam loop <CSVLoopContent> [warnifnodata]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
(matchfield|skipfield <FieldName> <RegularExpression>)* [showcmds [<Boolean>]]
|
||||
(matchfield|skipfield <FieldName> <REMatchPattern>)* [showcmds [<Boolean>]]
|
||||
[skiprows <Integer>] [maxrows <Integer>]
|
||||
gam <GAMArgumentList>
|
||||
|
||||
@@ -1511,7 +1514,7 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
|
||||
[limittoou <OrgUnitItem>])
|
||||
[user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
||||
[select <UserTypeEntity>]
|
||||
[aliasmatchpattern <RegularExpression>]
|
||||
[aliasmatchpattern <REMatchPattern>]
|
||||
[shownoneditable] [nogroups] [nousers]
|
||||
[onerowpertarget] [delimiter <Character>]
|
||||
[suppressnoaliasrows]
|
||||
@@ -1627,20 +1630,20 @@ gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
||||
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
||||
(matchfield attendeesdomainlist <DomainNameList>)|
|
||||
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
||||
(matchfield attendeespattern <RegularExpression>)|
|
||||
(matchfield attendeespattern <RESearchPattern>)|
|
||||
(matchfield attendeesstatus [<AttendeeAttendance>] [<AttendeeStatus>] <EmailAddressEntity>)|
|
||||
(matchfield creatoremail <RegularExpression>)|
|
||||
(matchfield creatorname <RegularExpression>)|
|
||||
(matchfield description <RegularExpression>)|
|
||||
(matchfield hangoutlink <RegularExpression>)|
|
||||
(matchfield location <RegularExpression>)|
|
||||
(matchfield organizeremail <RegularExpression>)|
|
||||
(matchfield organizername <RegularExpression>)|
|
||||
(matchfield creatoremail <RESearchPattern>)|
|
||||
(matchfield creatorname <RESearchPattern>)|
|
||||
(matchfield description <RESearchPattern>)|
|
||||
(matchfield hangoutlink <RESearchPattern>)|
|
||||
(matchfield location <RESearchPattern>)|
|
||||
(matchfield organizeremail <RESearchPattern>)|
|
||||
(matchfield organizername <RESearchPattern>)|
|
||||
(matchfield organizerself <Boolean>)|
|
||||
(matchfield status <RegularExpression>)|
|
||||
(matchfield summary <RegularExpression>)|
|
||||
(matchfield transparency <RegularExpression>)|
|
||||
(matchfield visibility <RegularExpression>)
|
||||
(matchfield status <RESearchPattern>)|
|
||||
(matchfield summary <RESearchPattern>)|
|
||||
(matchfield transparency <RESearchPattern>)|
|
||||
(matchfield visibility <RESearchPattern>)
|
||||
|
||||
<EventIDEntity> ::=
|
||||
(id|eventid <EventId>) |
|
||||
@@ -1718,7 +1721,7 @@ The following attributes are equivalent:
|
||||
(clearsharedproperty <PropertyKey>)|
|
||||
(removeattendee <EmailAddress>)|
|
||||
(removeresource <ResourceID>)|
|
||||
(replacedescription <RegularExpression> <String>)|
|
||||
(replacedescription <REMatchPattern> <RESubstitution>)|
|
||||
(selectremoveattendees <UserTypeEntity>)
|
||||
|
||||
<EventNotificationAttribute> ::=
|
||||
@@ -1908,7 +1911,7 @@ gam calendar|calendars <CalendarEntity> modify <CalendarSettings>+
|
||||
|
||||
<ChatContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <CharSet>])|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
@@ -3147,7 +3150,7 @@ gam info courses <CourseEntity> [owneraccess]
|
||||
[formatjson]
|
||||
gam print courses [todrive <ToDriveAttribute>*]
|
||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
||||
[owneremail] [owneremailmatchpattern <RegularExpression>]
|
||||
[owneremail] [owneremailmatchpattern <REMatchPattern>]
|
||||
[alias|aliases|aliasesincolumns [delimiter <Character>]]
|
||||
[show all|students|teachers] [countsonly]
|
||||
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||
@@ -3474,14 +3477,14 @@ gam show domainaliases|aliasdomains
|
||||
|
||||
<ContactSelection> ::=
|
||||
[query <QueryContact>]
|
||||
[emailmatchpattern <RegularExpression> [emailmatchtype work|home|other|<String>]]
|
||||
[emailmatchpattern <REMatchPattern> [emailmatchtype work|home|other|<String>]]
|
||||
[updated_min <Date>]
|
||||
|
||||
gam create contact <ContactAttribute>+
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*))| returnidonly]
|
||||
gam update contacts <ContactEntity>|<ContactSelection> <ContactAttribute>+
|
||||
gam clear contacts <ContactEntity>|<ContactSelection>
|
||||
[emailclearpattern <RegularExpression>] [emailcleartype work|home|other|<String>]
|
||||
[emailclearpattern <REMatchPattern>] [emailcleartype work|home|other|<String>]
|
||||
[delete_cleared_contacts_with_no_emails]
|
||||
gam dedup contacts <ContactEntity>|<ContactSelection> [matchType [<Boolean>]]
|
||||
gam delete contacts <ContactEntity>|<ContactSelection>
|
||||
@@ -3758,7 +3761,7 @@ gam update group|groups <GroupEntity> update [<GroupRole>]
|
||||
gam update group|groups <GroupEntity> clear [member] [manager] [owner]
|
||||
[usersonly|groupsonly]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[emailclearpattern|emailretainpattern <RegularExpression>]
|
||||
[emailclearpattern|emailretainpattern <REMatchPattern>]
|
||||
[removedomainnostatusmembers]
|
||||
[preview] [actioncsv]
|
||||
gam delete group|groups <GroupEntity> [noactionifalias]
|
||||
@@ -3847,14 +3850,14 @@ gam info group|groups <GroupEntity>
|
||||
[internal] [internaldomains <DomainNameList>] [external]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[types <GroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[formatjson]
|
||||
gam print groups [todrive <ToDriveAttribute>*]
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(group|group_ns|group_susp <GroupItem>)|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>] (matchsetting [not] <GroupAttribute>)*
|
||||
[emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
[descriptionmatchpattern [not] <REMatchPattern>] (matchsetting [not] <GroupAttribute>)*
|
||||
[admincreatedmatch <Boolean>]
|
||||
[maxresults <Number>]
|
||||
[allfields|([basic] [settings] <GroupFieldName>* [fields <GroupFieldNameList>])]
|
||||
@@ -3866,7 +3869,7 @@ gam print groups [todrive <ToDriveAttribute>*]
|
||||
[includederivedmembership]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[types <GroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[convertcrnl] [delimiter <Character>] [sortheaders]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[showitemcountonly]
|
||||
@@ -3894,8 +3897,8 @@ gam print group-members [todrive <ToDriveAttribute>*]
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(group|group_ns|group_susp <GroupItem>)|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>]
|
||||
[emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
[descriptionmatchpattern [not] <REMatchPattern>]
|
||||
[admincreatedmatch <Boolean>]
|
||||
[roles <GroupRoleList>] [members] [managers] [owners]
|
||||
[internal] [internaldomains <DomainNameList>] [external]
|
||||
@@ -3903,7 +3906,7 @@ gam print group-members [todrive <ToDriveAttribute>*]
|
||||
<MembersFieldName>* [fields <MembersFieldNameList>]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[types <GroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[userfields <UserFieldNameList>]
|
||||
[allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||
[(recursive [noduplicates])|includederivedmembership] [nogroupemail]
|
||||
@@ -3914,14 +3917,14 @@ gam print group-members [todrive <ToDriveAttribute>*]
|
||||
[([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryGroupList>)]))|
|
||||
(group|group_ns|group_susp <GroupItem>)|
|
||||
(select <GroupEntity>)]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>]
|
||||
[emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
[descriptionmatchpattern [not] <REMatchPattern>]
|
||||
[admincreatedmatch <Boolean>]
|
||||
[roles <GroupRoleList>] [members] [managers] [owners] [depth <Number>]
|
||||
[internal] [internaldomains <DomainNameList>] [external]
|
||||
[notsuspended|suspended] [notarchived|archived]
|
||||
[types <GroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[includederivedmembership]
|
||||
|
||||
# Cloud Identity Groups
|
||||
@@ -3977,7 +3980,7 @@ gam update cigroups <GroupEntity> update [<GroupRole>]
|
||||
<UserTypeEntity>
|
||||
gam update cigroups <GroupEntity> clear [member] [manager] [owner]
|
||||
[usersonly|groupsonly]
|
||||
[emailclearpattern|emailretainpattern <RegularExpression>]
|
||||
[emailclearpattern|emailretainpattern <REMatchPattern>]
|
||||
[preview] [actioncsv]
|
||||
gam delete cigroups <GroupEntity>
|
||||
|
||||
@@ -3988,19 +3991,19 @@ gam info cigroups <GroupEntity>
|
||||
[roles <GroupRoleList>] [members] [managers] [owners]
|
||||
[internal] [internaldomains <DomainNameList>] [external]
|
||||
[types <CIGroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[formatjson]
|
||||
gam print cigroups [todrive <ToDriveAttribute>*]
|
||||
[(cimember|ciowner <UserItem>)|(select <GroupEntity>)|(query <String>)]
|
||||
[showownedby <UserItem>]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>]
|
||||
[emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
[descriptionmatchpattern [not] <REMatchPattern>]
|
||||
[basic|allfields|(<CIGroupFieldName>* [fields <CIGroupFieldNameList>])]
|
||||
[roles <GroupRoleList>] [memberrestrictions]
|
||||
[members|memberscount] [managers|managerscount] [owners|ownerscount] [totalcount] [countsonly]
|
||||
[internal] [internaldomains <DomainNameList>] [external]
|
||||
[types <CIGroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[convertcrnl] [delimiter <Character>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
[showitemcountonly]
|
||||
@@ -4022,11 +4025,11 @@ gam info cimember <UserTypeEntity> <GroupEntity>
|
||||
gam print cigroup-members [todrive <ToDriveAttribute>*]
|
||||
[(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
||||
[showownedby <UserItem>]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>]
|
||||
[emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
[descriptionmatchpattern [not] <REMatchPattern>]
|
||||
[roles <GroupRoleList>] [members] [managers] [owners]
|
||||
[types <CIGroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
<CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
||||
[minimal|basic|full]
|
||||
[(recursive [noduplicates]) | includederivedmembership] [nogroupemail]
|
||||
@@ -4034,11 +4037,11 @@ gam print cigroup-members [todrive <ToDriveAttribute>*]
|
||||
gam show cigroup-members
|
||||
[(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
||||
[showownedby <UserItem>]
|
||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
[descriptionmatchpattern [not] <RegularExpression>]
|
||||
[emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
[descriptionmatchpattern [not] <REMatchPattern>]
|
||||
[roles <GroupRoleList>] [members] [managers] [owners]
|
||||
[types <CIGroupMemberTypeList>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
[memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
[minimal|basic|full]
|
||||
[(depth <Number>) | includederivedmembership]
|
||||
|
||||
@@ -4173,11 +4176,11 @@ gam info policies <CIPolicyNameEntity>
|
||||
[formatjson]
|
||||
gam print policies [todrive <ToDriveAttribute>*]
|
||||
[filter <String>] [nowarnings] [noappnames]
|
||||
[group <RegularExpression>] [ou|org|orgunit <RegularExpression>]
|
||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam show policies
|
||||
[filter <String>] [nowarnings] [noappnames]
|
||||
[group <RegularExpression>] [ou|org|orgunit <RegularExpression>]
|
||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||
[formatjson]
|
||||
|
||||
# Inbound SSO
|
||||
@@ -4735,8 +4738,10 @@ gam sendemail [recipient|to] <RecipientEntity>
|
||||
[from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[<MessageContent>]
|
||||
(replace <Tag> <String>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
@@ -4744,8 +4749,10 @@ gam <UserTypeEntity> sendemail recipient|to <RecipientEntity>
|
||||
[replyto <EmailAddress>]
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[<MessageContent>]
|
||||
(replace <Tag> <String>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
@@ -4753,8 +4760,10 @@ gam <UserTypeEntity> sendemail from <EmailAddress>
|
||||
[replyto <EmailAddress>]
|
||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
[subject <String>]
|
||||
[<MessageContent>] (replace <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
[<MessageContent>]
|
||||
(replace <Tag> <String>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
@@ -4815,12 +4824,12 @@ gam show shareddriveinfo <SharedDriveEntity>
|
||||
[formatjson]
|
||||
gam print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam show shareddrives
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[formatjson] [noorgunits [<Boolean>]]
|
||||
|
||||
@@ -4854,13 +4863,13 @@ gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity>
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> show shareddrives
|
||||
adminaccess [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[formatjson]
|
||||
@@ -4888,13 +4897,13 @@ gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity>
|
||||
[guiroles [<Boolean>]] [formatjson]
|
||||
gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[guiroles [<Boolean>]] [formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> show shareddrives
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>]
|
||||
[guiroles [<Boolean>]] [formatjson]
|
||||
@@ -5037,7 +5046,7 @@ gam sync teamdriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||
|
||||
gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||
@@ -5045,7 +5054,7 @@ gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam show teamdriveacls
|
||||
[teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||
@@ -5066,7 +5075,7 @@ gam <UserTypeEntity> sync teamdriveacls <SharedDriveEntity> with <SharedDriveEnt
|
||||
|
||||
gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||
@@ -5075,7 +5084,7 @@ gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> show teamdriveacls
|
||||
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
<PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
||||
@@ -5275,19 +5284,19 @@ gam delete vaultexport|export <ExportItem> matter <MatterItem>
|
||||
gam delete vaultexport|export <MatterItem> <ExportItem>
|
||||
gam download vaultexport|export <ExportItem> matter <MatterItem>
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [noverify] [noextract] [ziptostdout]
|
||||
[bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
[bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
[downloadattempts <Integer>] [retryinterval <Integer>]
|
||||
gam download vaultexport|export <MatterItem> <ExportItem>
|
||||
[targetfolder <FilePath>] [targetname <FileName>] [noverify] [noextract] [ziptostdout]
|
||||
[bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
[bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
[downloadattempts <Integer>] [retryinterval <Integer>]
|
||||
gam copy vaultexport|export <ExportItem> matter <MatterItem>
|
||||
[targetbucket <String>] [targetprefix <String>]
|
||||
[bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
[bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
[copyattempts <Integer>] [retryinterval <Integer>]
|
||||
gam copy vaultexport|export <MatterItem> <ExportItem>
|
||||
[targetbucket <String>] [targetprefix <String>]
|
||||
[bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
[bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
[copyattempts <Integer>] [retryinterval <Integer>]
|
||||
|
||||
<VaultExportFieldName> ::=
|
||||
@@ -5560,7 +5569,9 @@ gam create|add user <EmailAddress> [ignorenullpassword] <UserAttribute>*
|
||||
[mailbox <EmailAaddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
]
|
||||
[logpassword <FileName>]
|
||||
[addnumericsuffixonduplicate <Number>]
|
||||
|
||||
@@ -5568,8 +5579,8 @@ gam <UserTypeEntity> waitformailbox [retries <Number>]
|
||||
|
||||
gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[immutableous <OrgUnitEntity>]|
|
||||
@@ -5581,10 +5592,12 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAaddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
]
|
||||
[notifyonupdate [<Boolean>]] [setchangepasswordoncreate [<Boolean>]]
|
||||
[logpassword <FileName>]
|
||||
gam delete user <UserItem> [noactionifalias]
|
||||
@@ -5603,9 +5616,9 @@ gam info user [<UserItem>]
|
||||
[formatjson]
|
||||
|
||||
gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <FileName> [charset <CharSet>]
|
||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName>|<SchemaNameField>]
|
||||
@@ -5615,13 +5628,15 @@ gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
||||
[notify <EmailAddressList>
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAaddress>]
|
||||
[from <EmailAddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAaddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
]
|
||||
[notifyonupdate [<Boolean>]] [setchangepasswordoncreate [<Boolean>]]
|
||||
[logpassword <FileName>]
|
||||
[verifynotinvitable]
|
||||
gam delete users <UserTypeEntity> [noactionifalias]
|
||||
gam undelete users <UserEntity> [ou|org|orgunit <OrgUnitPath>]
|
||||
gam suspend users <UserTypeEntity> [noactionifalias]
|
||||
@@ -5638,9 +5653,11 @@ gam info users <UserTypeEntity>
|
||||
[formatjson]
|
||||
|
||||
gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||
[verifynotinvitable] [noactionifalias]
|
||||
[updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
[updateoufromgroup <CSVFileInput> [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
||||
[updateoufromgroup <FileName> [charset <Charset>]
|
||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
[clearschema <SchemaName>|<SchemaNameField>]
|
||||
[createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
|
||||
(groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
|
||||
@@ -5649,12 +5666,14 @@ gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||
[subject <String>]
|
||||
[notifypassword <String>]
|
||||
[from <EmailAaddress>]
|
||||
[mailbox <EmailAaddress>]
|
||||
[mailbox <EmailAddress>]
|
||||
[replyto <EmailAddress>]
|
||||
[<NotifyMessageContent>]
|
||||
(replace <Tag> <UserReplacement>)*]
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
]
|
||||
[notifyonupdate [<Boolean>]] [setchangepasswordoncreate [<Boolean>]]
|
||||
[logpassword <FileName>]
|
||||
[verifynotinvitable]
|
||||
gam <UserTypeEntity> delete users [noactionifalias]
|
||||
gam <UserEntity> undelete users [ou|org|orgunit <OrgUnitPath>]
|
||||
gam <UserTypeEntity> suspend users [noactionifalias]
|
||||
@@ -5688,7 +5707,7 @@ gam print users [todrive <ToDriveAttribute>*]
|
||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||
[issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
[issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||
[showitemcountonly]
|
||||
|
||||
@@ -5705,7 +5724,7 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||
[issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
[issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||
[showitemcountonly]
|
||||
|
||||
@@ -5720,7 +5739,7 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||
[issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
[issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||
[showitemcountonly]
|
||||
|
||||
@@ -5959,19 +5978,19 @@ gam <UserTypeEntity> transfer calendars|seccals <UserItem> [<UserCalendarEntity>
|
||||
|
||||
<EventMatchProperty> ::=
|
||||
(matchfield attendees <EmailAddressEntity>)|
|
||||
(matchfield attendeespattern <RegularExpression>)|
|
||||
(matchfield attendeespattern <RESearchPattern>)|
|
||||
(matchfield attendeesstatus [<AttendeeAttendance>] [<AttendeeStatus>] <EmailAddressEntity>)|
|
||||
(matchfield creatoremail <RegularExpression>)|
|
||||
(matchfield creatorname <RegularExpression>)|
|
||||
(matchfield description <RegularExpression>)|
|
||||
(matchfield hangoutlink <RegularExpression>)|
|
||||
(matchfield location <RegularExpression>)|
|
||||
(matchfield organizeremail <RegularExpression>)|
|
||||
(matchfield organizername <RegularExpression>)|
|
||||
(matchfield status <RegularExpression>)|
|
||||
(matchfield summary <RegularExpression>)|
|
||||
(matchfield transparency <RegularExpression>)|
|
||||
(matchfield visibility <RegularExpression>)
|
||||
(matchfield creatoremail <RESearchPattern>)|
|
||||
(matchfield creatorname <RESearchPattern>)|
|
||||
(matchfield description <RESearchPattern>)|
|
||||
(matchfield hangoutlink <RESearchPattern>)|
|
||||
(matchfield location <RESearchPattern>)|
|
||||
(matchfield organizeremail <RESearchPattern>)|
|
||||
(matchfield organizername <RESearchPattern>)|
|
||||
(matchfield status <RESearchPattern>)|
|
||||
(matchfield summary <RESearchPattern>)|
|
||||
(matchfield transparency <RESearchPattern>)|
|
||||
(matchfield visibility <RESearchPattern>)
|
||||
|
||||
<EventIDEntity> ::=
|
||||
(id|eventid <EventId>) |
|
||||
@@ -6048,7 +6067,7 @@ The following attributes are equivalent:
|
||||
(clearprivateproperty <PropertyKey>)|
|
||||
(clearsharedproperty <PropertyKey>)|
|
||||
(removeattendee <EmailAddress>)|
|
||||
(replacedescription <RegularExpression> <String>)|
|
||||
(replacedescription <REMatchPattern> <RESubstitution>)|
|
||||
(selectremoveattendees <UserTypeEntity>)
|
||||
|
||||
<EventNotificationAttribute> ::=
|
||||
@@ -6165,7 +6184,7 @@ gam <UserTypeEntity> print focustime|outofoffice|workinglocation
|
||||
|
||||
<ChatContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <CharSet>])|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>))
|
||||
|
||||
@@ -6501,7 +6520,7 @@ gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
||||
|
||||
gam <UserTypeEntity> create|add drivefile
|
||||
[(localfile <FileName>|-)|(url <URL>)]
|
||||
[(drivefilename|newfilename <DriveFileName>) | (replacefilename <RegularExpression> <String>)*]
|
||||
[(drivefilename|newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||
[stripnameprefix <String>] [noduplicate]
|
||||
[timestamp [<Boolean>]] [timeformat <String>]
|
||||
<DriveFileCreateAttribute>*
|
||||
@@ -6522,12 +6541,12 @@ gam <UserTypeEntity> create|add drivefile
|
||||
|
||||
gam <UserTypeEntity> update drivefile <DriveFileEntity> [copy] [returnidonly|returnlinkonly]
|
||||
[(localfile <FileName>|-)|(url <URL>)]
|
||||
[retainname | (newfilename <DriveFileName>) | (replacefilename <RegularExpression> <String>)*]
|
||||
[retainname | (newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||
[stripnameprefix <String>]
|
||||
[timestamp [<Boolean>]] [timeformat <String>]
|
||||
<DriveFileUpdateAttribute>*
|
||||
[(gsheet|csvsheet <SheetEntity> [clearfilter])|(addsheet <String>)]
|
||||
[charset <CharSet>] [columndelimiter <Character>]
|
||||
[charset <Charset>] [columndelimiter <Character>]
|
||||
|
||||
<DriveFileCopyAttribute> ::=
|
||||
(contentrestrictions (readonly false)|(readonly true [reason <String>]) [ownerrestricted [<Boolean>]])|
|
||||
@@ -6546,7 +6565,7 @@ gam <UserTypeEntity> update drivefile <DriveFileEntity> [copy] [returnidonly|ret
|
||||
(writerscanshare|writerscantshare [<Boolean>])
|
||||
|
||||
gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
||||
[newfilename <DriveFileName>] (replacefilename <RegularExpression> <String>)*
|
||||
[newfilename <DriveFileName>] (replacefilename <REMatchPattern> <RESubstitution>)*
|
||||
[stripnameprefix <String>]
|
||||
[excludetrashed]
|
||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*) |
|
||||
@@ -6556,11 +6575,11 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
||||
[mergewithparent [<Boolean>]] [recursive [depth <Number>]]
|
||||
<DriveFileCopyAttribute>*
|
||||
[skipids <DriveFileEntity>]
|
||||
[copysubfiles [<Boolean>]] [filenamematchpattern <RegularExpression>]
|
||||
[copysubfiles [<Boolean>]] [filenamematchpattern <REMatchPattern>]
|
||||
[filemimetype [not] <MimeTypeList>]
|
||||
[copysubfilesownedby any|me|others]
|
||||
[copysubfolders [<Boolean>]] [foldernamematchpattern <RegularExpression>]
|
||||
[copysubshortcuts [<Boolean>]] [shortcutnamematchpattern <RegularExpression>]
|
||||
[copysubfolders [<Boolean>]] [foldernamematchpattern <REMatchPattern>]
|
||||
[copysubshortcuts [<Boolean>]] [shortcutnamematchpattern <REMatchPattern>]
|
||||
[duplicatefiles overwriteolder|overwriteall|duplicatename|uniquename|skip]
|
||||
[duplicatefolders merge|duplicatename|uniquename|skip]
|
||||
[copiedshortcutspointtocopiedfiles [<Boolean>]]
|
||||
@@ -7141,7 +7160,7 @@ gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
[filenamematchpattern <REMatchPattern>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[showsize] [showmimetypesize] [showlastmodification]
|
||||
@@ -7156,7 +7175,7 @@ gam <UserTypeEntity> show filecounts
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
[filenamematchpattern <REMatchPattern>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[showsize] [showmimetypesize] [showlastmodification]
|
||||
@@ -7188,7 +7207,7 @@ gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
[filenamematchpattern <REMatchPattern>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[fields <FileTreeFieldNameList>]
|
||||
@@ -7200,7 +7219,7 @@ gam <UserTypeEntity> show filetree
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
[filenamematchpattern <REMatchPattern>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
[excludetrashed]
|
||||
[fields <FileTreeFieldNameList>]
|
||||
@@ -7221,7 +7240,7 @@ gam <UserTypeEntity> print filelist [todrive <ToDriveAttribute>*]
|
||||
[anyowner|(showownedby any|me|others)]
|
||||
[showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>] [mimetypeinquery [<Boolean>]]
|
||||
[sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
[filenamematchpattern <RegularExpression>]
|
||||
[filenamematchpattern <REMatchPattern>]
|
||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>] [pmfilter] [oneitemperrow]
|
||||
[excludetrashed]
|
||||
[maxfiles <Integer>] [nodataheaders <String>]
|
||||
@@ -7417,8 +7436,8 @@ gam <UserTypeEntity> update labelsettings <LabelName> [name <String>]
|
||||
[messagelistvisibility hide|show] [labellistvisibility hide|show|showifunread]
|
||||
[backgroundcolor "<LabelColorHex>|<LabelBackgroundColorHex>|custom:<ColorHex>"]
|
||||
[textcolor "<LabelColorHex>|<LabelTextColorHex>|custom:<ColorHex>"]
|
||||
gam <UserTypeEntity> update label|labels [search <RegularExpression>] [replace <LabelReplacement>] [merge [keepoldlabel]]
|
||||
gam <UserTypeEntity> delete label|labels <LabelName>|regex:<RegularExpression>|--ALL_LABELS--
|
||||
gam <UserTypeEntity> update label|labels [search <REMatchPattern>] [replace <LabelReplacement>] [merge [keepoldlabel]]
|
||||
gam <UserTypeEntity> delete label|labels <LabelName>|regex:<REMatchPattern>|--ALL_LABELS--
|
||||
gam <UserTypeEntity> delete labellist <LabelNameEntity>
|
||||
gam <UserTypeEntity> delete labelid <LabelID>
|
||||
gam <UserTypeEntity> delete labelidlist <LabelIDEntity>
|
||||
@@ -7532,22 +7551,28 @@ gam <UserTypeEntity> print labels|label [todrive <ToDriveAttribute>*]
|
||||
(emlfile <FileName> [charset <Charset>])
|
||||
|
||||
gam <UserTypeEntity> draft message
|
||||
<MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
<MessageContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(attach <FileName> [charset <CharSet>])*
|
||||
(attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
gam <UserTypeEntity> import message
|
||||
<MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
<MessageContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
(attach <FileName> [charset <CharSet>])*
|
||||
(attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[deleted [<Boolean>]] [checkspam|nevermarkspam [<Boolean>]] [processforcalendar [<Boolean>]]
|
||||
gam <UserTypeEntity> insert message
|
||||
<MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
<MessageContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
(addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
(attach <FileName> [charset <CharSet>])*
|
||||
(attach <FileName> [charset <Charset>])*
|
||||
(embedimage <FileName> <String>)*
|
||||
[deleted [<Boolean>]]
|
||||
|
||||
@@ -7596,25 +7621,25 @@ gam <UserTypeEntity> forward thread|thtreads recipient|to <RecipientEntity>
|
||||
gam <UserTypeEntity> show messages|threads
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <RegularExpression>] [sendermatchpattern <RegularExpression>]
|
||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
[headers all|<SMTPHeaderList>] [dateheaderformat iso|rfc2822|<String>] [dateheaderconverttimezone [<Boolean>]]
|
||||
[showlabels] [delimiter <Character>] [showbody] [showhtml] [showdate] [showsize] [showsnippet]
|
||||
[maxmessagesperthread <Number>]
|
||||
[[attachmentnamepattern <RegularExpression>]
|
||||
[[attachmentnamepattern <REMatchPattern>]
|
||||
[showattachments [noshowtextplain]]
|
||||
[saveattachments [targetfolder <FilePath>] [overwrite [<Boolean>]]]
|
||||
[uploadattachments [<DriveFileParentAttribute>]]]
|
||||
gam <UserTypeEntity> print messages|threads [todrive <ToDriveAttribute>*]
|
||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])*
|
||||
[quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
[labelmatchpattern <RegularExpression>] [sendermatchpattern <RegularExpression>]
|
||||
[labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
[countsonly|positivecountsonly] [useronly]
|
||||
[headers all|<SMTPHeaderList>] [dateheaderformat iso|rfc2822|<String> [dateheaderconverttimezone [<Boolean>]]]
|
||||
[showlabels] [delimiter <Character>] [showbody] [showhtml] [showdate] [showsize] [showsnippet]
|
||||
[maxmessagesperthread <Number>]
|
||||
[convertcrnl] [delimiter <Character>]
|
||||
[[attachmentnamepattern <RegularExpression>]
|
||||
[[attachmentnamepattern <REMatchPattern>]
|
||||
[showattachments [noshowtextplain]]]
|
||||
(addcsvdata <FieldName> <String>)*
|
||||
|
||||
@@ -7626,13 +7651,17 @@ gam <UserTypeEntity> print gmailprofile [todrive <ToDriveAttribute>*]
|
||||
# Users - Gmail - Send As/Signature/Vacation
|
||||
|
||||
gam <UserTypeEntity> [create|add] sendas <EmailAddress> [name] <String>
|
||||
[<SendAsContent> (replace <Tag> <UserReplacement>)*]
|
||||
[<SendAsContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
[smtpmsa.host <SMTPHostName> smtpmsa.port 25|465|587
|
||||
smtpmsa.username <UserName> smtpmsa.password <Password>
|
||||
[smtpmsa.securitymode none|ssl|starttls]]
|
||||
gam <UserTypeEntity> update sendas <EmailAddress> [name <String>]
|
||||
[<SendAsContent> (replace <Tag> <UserReplacement>)*]
|
||||
[<SendAsContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
gam <UserTypeEntity> delete sendas <EmailAddressEntity>
|
||||
gam <UserTypeEntity> info sendas <EmailAddressEntity> [compact|format|html]
|
||||
@@ -7642,7 +7671,9 @@ gam <UserTypeEntity> print sendas [compact]
|
||||
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
||||
|
||||
gam <UserTypeEntity> signature|sig
|
||||
<SignatureContent> (replace <Tag> <UserReplacement>)*
|
||||
<SignatureContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
[name <String>]
|
||||
[primary]
|
||||
@@ -7652,7 +7683,9 @@ gam <UserTypeEntity> print signature [compact]
|
||||
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
||||
|
||||
gam <UserTypeEntity> vacation [<Boolean>] [subject <String>]
|
||||
[<VacationMessageContent> (replace <Tag> <UserReplacement>)*]
|
||||
[<VacationMessageContent>
|
||||
(replace <Tag> <UserReplacement>)*
|
||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
[html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
|
||||
[start|startdate <Date>|Started] [end|enddate <Date>|NotSpecified]
|
||||
gam <UserTypeEntity> show vacation [compact|format|html] [enabledonly]
|
||||
@@ -7731,7 +7764,7 @@ gam <UserTypeEntity> add group|groups
|
||||
([<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)+
|
||||
gam <UserTypeEntity> delete group|groups
|
||||
[(domain <DomainName>)|(customerid <CustomerID>)|
|
||||
(emailmatchpattern [not] <RegularExpression>)|<GroupEntity>]
|
||||
(emailmatchpattern [not] <REMatchPattern>)|<GroupEntity>]
|
||||
gam <UserTypeEntity> update group|groups
|
||||
[(domain <DomainName>)|(customerid <CustomerID>)]) [<GroupRole>] [[delivery] <DeliverySetting>]
|
||||
([<GroupRole>] [[delivery] <DeliverySetting>] [<GroupEntity>])*
|
||||
@@ -7779,7 +7812,7 @@ gam <UserTypeEntity> check isinvitable [todrive <ToDriveAttribute>*]
|
||||
|
||||
<NoteContent> ::=
|
||||
((text <String>)|
|
||||
(textfile <FileName> [charset <CharSet>])|
|
||||
(textfile <FileName> [charset <Charset>])|
|
||||
(gdoc <UserGoogleDoc>)|
|
||||
(gcsdoc <StorageBucketObjectName>)|
|
||||
<JSONData>)
|
||||
@@ -8004,7 +8037,7 @@ gam <UserItem> print meettranscripts <MeetConferenceName> [todrive <ToDriveAttri
|
||||
<PeopleUserContactSelection> ::=
|
||||
[(selectcontactgroup <PeopleContactGroupItem>)|
|
||||
[query <QueryContact>]]
|
||||
[emailmatchpattern <RegularExpression> [emailmatchtype work|home|other|<String>]]
|
||||
[emailmatchpattern <REMatchPattern> [emailmatchtype work|home|other|<String>]]
|
||||
|
||||
gam <UserTypeEntity> create contact
|
||||
[<PeopleContactAttribute>+]
|
||||
@@ -8019,7 +8052,7 @@ gam <UserTypeEntity> delete contacts
|
||||
|
||||
gam <UserTypeEntity> clear contacts
|
||||
<PeopleResourceNameEntity>|<PeopleUserContactSelection>
|
||||
[emailclearpattern <RegularExpression>] [emailcleartype work|home|other|<String>]
|
||||
[emailclearpattern <REMatchPattern>] [emailcleartype work|home|other|<String>]
|
||||
[delete_cleared_contacts_with_no_emails]
|
||||
|
||||
gam <UserTypeEntity> dedup contacts
|
||||
@@ -8047,7 +8080,7 @@ gam <UserTypeEntity> info contacts
|
||||
<PeoplePrintShowUserContactSelection> ::=
|
||||
[(selectcontactgroup <PeopleContactGroupItem>)|(filtercontactgroup <PeopleContactGroupItem>)|
|
||||
([query <QueryContact>] [selectmaincontacts|selectothercontacts])]
|
||||
[emailmatchpattern <RegularExpression> [emailmatchtype work|home|other|<String>]]
|
||||
[emailmatchpattern <REMatchPattern> [emailmatchtype work|home|other|<String>]]
|
||||
|
||||
gam <UserTypeEntity> show contacts
|
||||
<PeoplePrintShowUserContactSelection>
|
||||
@@ -8070,7 +8103,7 @@ gam <UserTypeEntity> print contacts [todrive <ToDriveAttribute>*]
|
||||
|
||||
<OtherContactsSelection> ::=
|
||||
[query <QueryContact>]
|
||||
[emailmatchpattern <RegularExpression> [emailmatchtype work|home|other|<String>]]
|
||||
[emailmatchpattern <REMatchPattern> [emailmatchtype work|home|other|<String>]]
|
||||
|
||||
gam <UserTypeEntity> copy othercontacts
|
||||
<OtherContactsResourceNameEntity>|<OtherContactsSelection>
|
||||
@@ -8280,13 +8313,13 @@ gam <UserTypeEntity> show shareddriveinfo <SharedDriveEntity> [fields <SharedDri
|
||||
[formatjson]
|
||||
gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||
[adminaccess|asadmin [teamdriveadminquery|query <QueryTeamDrive>]]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[formatjson [quotechar <Character>]]
|
||||
gam <UserTypeEntity> show shareddrives
|
||||
[adminaccess|asadmin [teamdriveadminquery|query <QueryTeamDrive>]]
|
||||
[matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
(role|roles <SharedDriveACLRoleList>)*
|
||||
[fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
[formatjson]
|
||||
|
||||
@@ -1,3 +1,78 @@
|
||||
7.06.00
|
||||
|
||||
Upgraded to OpenSSL 3.5.0.
|
||||
|
||||
Fixed bug in `gam print cigroups` where `createTime`, `updateTime` and `statusTime`
|
||||
were not converted according to `gam.cfg timezone`.
|
||||
|
||||
7.05.22
|
||||
|
||||
Updated progress messages for `gam <UserTypeEntity> print filelist|filecounts|filesharecounts|filetree select shareddriveid <SharedDriveID>`
|
||||
to display the ID of the SharedDrive that is being accessed.
|
||||
```
|
||||
Getting all Drive Files/Folders for user@domain.com on Shared Drive ID: <SharedDriveID
|
||||
Got 33 Drive Files/Folders for user@domain.com on Shared Drive ID: <SharedDriveID>...
|
||||
```
|
||||
|
||||
7.05.21
|
||||
|
||||
Fixed bug in `gam update chromepolicy` that generated an error like the following
|
||||
when JSON data was read from a file.
|
||||
```
|
||||
ERROR: JSON: {'error': {'code': 400, 'message': 'Invalid enum value: {prefix}{value} for enum type: chrome.policy.api.v1.devicepolicy.AllowNewUsersEnum', 'status': 'INVALID_ARGUMENT'}}
|
||||
```
|
||||
|
||||
Fixed bug in `gam create chromepolicyimage` that caused a trap.
|
||||
|
||||
7.05.20
|
||||
|
||||
Updated code to validate both `<RegularExpression>` and `<ReplacementString>`
|
||||
in the following command line options; this will expose errors when the command
|
||||
is being parsed rather than at run-time.
|
||||
```
|
||||
replaceregex <RegularExpression> <ReplacementString>
|
||||
replacedescription <RegularExpression> <ReplacementString>
|
||||
replacefilename <RegularExpression> <ReplacementString>
|
||||
```
|
||||
|
||||
7.05.19
|
||||
|
||||
Added `replaceregex <RegularExpression> <ReplacementString> <Tag> <String>` to the following commands:
|
||||
```
|
||||
gam sendemail subject <String> <MessageContent>
|
||||
gam <UserTypeEntity> sendemail subject <String> <MessageContent>
|
||||
```
|
||||
|
||||
The `<RegularExpression>` is used as a match pattern against `<String>` to produce `<ReplacementString>`.
|
||||
Instances of `{Tag}` will be replaced by `<ReplacementString>` in the message subject and body.
|
||||
|
||||
Added `replaceregex <RegularExpression> <ReplacementString> <Tag> <UserReplacement>` to the following commands:
|
||||
```
|
||||
gam create user <NotifyMessageContent>
|
||||
gam update user <NotifyMessageContent>
|
||||
gam update users <NotifyMessageContent>
|
||||
gam <UserTypeEntity> update users <NotifyMessageContent>
|
||||
gam <UserTypeEntity> draft message <MessageContent>
|
||||
gam <UserTypeEntity> import message <MessageContent>
|
||||
gam <UserTypeEntity> insert messageo <MessageContent>
|
||||
gam <UserTypeEntity> create sendas <SendAsContent>
|
||||
gam <UserTypeEntity> update sendas <SendAsContent>
|
||||
gam <UserTypeEntity> signature <SignatureContent>
|
||||
gam <UserTypeEntity> vacation subject <String> <VacationMessageContent>
|
||||
```
|
||||
|
||||
The `<RegularExpression>` is used as a match pattern against `<UserReplacement>` to produce `<ReplacementString>`.
|
||||
Instances of `{Tag}` will be replaced by `<ReplacementString>` in the indicated items.
|
||||
|
||||
For example, when adding a phone number to a signature, an unformatted number can be formatted:
|
||||
```
|
||||
replaceregex "(\d{3})(\d{3})(\d{4})" "(\1) \2-\3" Phone "9876543210"
|
||||
replaces 9876543210 with (987) 654-3210
|
||||
|
||||
replaceregex "(\+\d{2})(\d{3})(\d{3})(\d{3})" "\1 \2 \3 \4" Phone "+61987654321"
|
||||
replaces +61421221506 with +61 987 654 321
|
||||
```
|
||||
|
||||
7.05.18
|
||||
|
||||
Updated `gam calendars <CalendarEntity> show events` and `gam <UserTypeEntity> show events`
|
||||
|
||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
||||
"""
|
||||
|
||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||
__version__ = '7.05.18'
|
||||
__version__ = '7.06.00'
|
||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||
|
||||
#pylint: disable=wrong-import-position
|
||||
@@ -1723,6 +1723,19 @@ def getREPattern(flags=0):
|
||||
return validateREPattern(patstr, flags)
|
||||
missingArgumentExit(Cmd.OB_RE_PATTERN)
|
||||
|
||||
def validateREPatternSubstitution(pattern, replacement):
|
||||
try:
|
||||
re.sub(pattern, replacement, '')
|
||||
return (pattern, replacement)
|
||||
except re.error as e:
|
||||
Cmd.Backup()
|
||||
usageErrorExit(f'{Cmd.OB_RE_SUBSTITUTION} {Msg.ERROR}: {e}')
|
||||
|
||||
def getREPatternSubstitution(flags=0):
|
||||
pattern = getREPattern(flags)
|
||||
replacement = getString(Cmd.OB_RE_SUBSTITUTION, minLen=0)
|
||||
return validateREPatternSubstitution(pattern, replacement)
|
||||
|
||||
def getSheetEntity(allowBlankSheet):
|
||||
if Cmd.ArgumentsRemaining():
|
||||
sheet = Cmd.Current()
|
||||
@@ -6806,9 +6819,9 @@ def getEntitiesFromCSVFile(shlexSplit, returnSet=False):
|
||||
return entityList if not returnSet else entitySet
|
||||
|
||||
# <CSVFileSelector>
|
||||
# keyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
# subkeyfield <FieldName> [keypattern <RegularExpression>] [keyvalue <String>] [delimiter <Character>]
|
||||
# (matchfield|skipfield <FieldName> <RegularExpression>)*
|
||||
# keyfield <FieldName> [keypattern <RESearchPattern>] [keyvalue <RESubstitution>] [delimiter <Character>]
|
||||
# subkeyfield <FieldName> [keypattern <RESearchPattern>] [keyvalue <RESubstitution>] [delimiter <Character>]
|
||||
# (matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||
# [datafield <FieldName>(:<FieldName>)* [delimiter <Character>]]
|
||||
def getEntitiesFromCSVbyField():
|
||||
|
||||
@@ -10329,7 +10342,7 @@ def processSubFields(GAM_argv, row, subFields):
|
||||
|
||||
# gam csv <CSVLoopContent> [warnifnodata]
|
||||
# [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
# (matchfield|skipfield <FieldName> <RegularExpression>)* [showcmds [<Boolean>]]
|
||||
# (matchfield|skipfield <FieldName> <RESearchPattern>)* [showcmds [<Boolean>]]
|
||||
# [skiprows <Integer>] [maxrows <Integer>]
|
||||
# gam <GAM argument list>
|
||||
def doCSV(testMode=False):
|
||||
@@ -10385,7 +10398,7 @@ def doCSVTest():
|
||||
|
||||
# gam loop <CSVLoopContent> [warnifnodata]
|
||||
# [columndelimiter <Character>] [quotechar <Character>] [fields <FieldNameList>]
|
||||
# (matchfield|skipfield <FieldName> <RegularExpression>)* [showcmds [<Boolean>]]
|
||||
# (matchfield|skipfield <FieldName> <RESearchPattern>)* [showcmds [<Boolean>]]
|
||||
# [skiprows <Integer>] [maxrows <Integer>]
|
||||
# gam <GAM argument list>
|
||||
def doLoop(loopCmd):
|
||||
@@ -14517,7 +14530,13 @@ def _initTagReplacements():
|
||||
'fieldsSet': set(), 'fields': '',
|
||||
'schemasSet': set(), 'customFieldMask': None}
|
||||
|
||||
def _getTagReplacement(tagReplacements, allowSubs):
|
||||
def _getTagReplacement(myarg, tagReplacements, allowSubs):
|
||||
if myarg == 'replace':
|
||||
trregex = None
|
||||
elif myarg == 'replaceregex':
|
||||
trregex = getREPatternSubstitution(re.IGNORECASE)
|
||||
else:
|
||||
return False
|
||||
matchTag = getString(Cmd.OB_TAG)
|
||||
matchReplacement = getString(Cmd.OB_STRING, minLen=0)
|
||||
if matchReplacement.startswith('field:'):
|
||||
@@ -14562,7 +14581,8 @@ def _getTagReplacement(tagReplacements, allowSubs):
|
||||
tagReplacements['fieldsSet'].add(field)
|
||||
tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
|
||||
tagReplacements['tags'][matchTag] = {'field': field, 'subfield': subfield,
|
||||
'matchfield': matchfield, 'matchvalue': matchvalue, 'value': ''}
|
||||
'matchfield': matchfield, 'matchvalue': matchvalue, 'value': '',
|
||||
'trregex': trregex}
|
||||
if field == 'locations' and subfield == 'buildingName':
|
||||
_makeBuildingIdNameMap()
|
||||
elif matchReplacement.startswith('schema:'):
|
||||
@@ -14580,15 +14600,21 @@ def _getTagReplacement(tagReplacements, allowSubs):
|
||||
tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
|
||||
tagReplacements['schemasSet'].add(schemaName)
|
||||
tagReplacements['customFieldMask'] = ','.join(tagReplacements['schemasSet'])
|
||||
tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': ''}
|
||||
tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': '',
|
||||
'trregex': trregex}
|
||||
elif ((matchReplacement.find('#') >= 0) and
|
||||
(matchReplacement.find('#user#') >= 0) or (matchReplacement.find('#email#') >= 0) or (matchReplacement.find('#username#') >= 0)):
|
||||
if not allowSubs:
|
||||
usageErrorExit(Msg.USER_SUBS_NOT_ALLOWED_TAG_REPLACEMENT)
|
||||
tagReplacements['subs'] = True
|
||||
tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': ''}
|
||||
tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': '',
|
||||
'trregex': trregex}
|
||||
else:
|
||||
tagReplacements['tags'][matchTag] = {'value': matchReplacement}
|
||||
if trregex is None:
|
||||
tagReplacements['tags'][matchTag] = {'value': matchReplacement}
|
||||
else:
|
||||
tagReplacements['tags'][matchTag] = {'value': re.sub(trregex[0], trregex[1], matchReplacement)}
|
||||
return True
|
||||
|
||||
def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None):
|
||||
if results is None:
|
||||
@@ -14670,6 +14696,9 @@ def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None)
|
||||
tag['value'] = str(results.get('customSchemas', {}).get(tag['schema'], {}).get(tag['schemafield'], ''))
|
||||
elif tag.get('template'):
|
||||
tag['value'] = _substituteForUser(tag['template'], user, userName)
|
||||
trregex = tag.get('trregex', None)
|
||||
if trregex is not None:
|
||||
tag['value'] = re.sub(trregex[0], trregex[1], tag['value'])
|
||||
|
||||
RTL_PATTERN = re.compile(r'(?s){RTL}.*?{/RTL}')
|
||||
RT_PATTERN = re.compile(r'(?s){RT}.*?{/RT}')
|
||||
@@ -14922,7 +14951,9 @@ def getRecipients():
|
||||
# gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
|
||||
# [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
# [subject <String>]
|
||||
# [<MessageContent>] (replace <Tag> <String>)*
|
||||
# [<MessageContent>]
|
||||
# (replace <Tag> <String>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||
# [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
# (embedimage <FileName> <String>)*
|
||||
# [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
@@ -14930,7 +14961,9 @@ def getRecipients():
|
||||
# gam <UserTypeEntity> sendemail recipient <RecipientEntity> [replyto <EmailAddress>]
|
||||
# [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
# [subject <String>]
|
||||
# [<MessageContent>] (replace <Tag> <String>)*
|
||||
# [<MessageContent>]
|
||||
# (replace <Tag> <String>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||
# [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
# (embedimage <FileName> <String>)*
|
||||
# [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
@@ -14938,7 +14971,9 @@ def getRecipients():
|
||||
# gam <UserTypeEntity> sendemail from <EmailAddress> [replyto <EmailAddress>]
|
||||
# [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||
# [subject <String>]
|
||||
# [<MessageContent>] (replace <Tag> <String>)*
|
||||
# [<MessageContent>]
|
||||
# (replace <Tag> <String>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||
# [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
|
||||
# (embedimage <FileName> <String>)*
|
||||
# [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||
@@ -15001,8 +15036,8 @@ def doSendEmail(users=None):
|
||||
body['name']['familyName'] = getString(Cmd.OB_STRING, minLen=0, maxLen=60)
|
||||
elif myarg in {'password', 'notifypassword'}:
|
||||
body['password'] = notify['password'] = getString(Cmd.OB_PASSWORD, maxLen=100)
|
||||
elif myarg == 'replace':
|
||||
_getTagReplacement(tagReplacements, False)
|
||||
elif _getTagReplacement(myarg, tagReplacements, False):
|
||||
pass
|
||||
elif myarg == 'attach':
|
||||
attachments.append((getFilename(), getCharSet()))
|
||||
elif myarg == 'embedimage':
|
||||
@@ -18612,7 +18647,7 @@ def userFilters(kwargs, query, orgUnitPath, isSuspended):
|
||||
# [limittoou <OrgUnitItem>])
|
||||
# [user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
||||
# [select <UserTypeEntity>]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
# [shownoneditable] [nogroups] [nousers]
|
||||
# [onerowpertarget] [delimiter <Character>]
|
||||
# [suppressnoaliasrows]
|
||||
@@ -20079,7 +20114,7 @@ def _clearUpdateContacts(updateContacts):
|
||||
Ind.Decrement()
|
||||
|
||||
# gam clear contacts <ContactEntity>|<ContactSelection>
|
||||
# [clearmatchpattern <RegularExpression>] [clearmatchtype work|home|other|<String>]
|
||||
# [clearmatchpattern <REMatchPattern>] [clearmatchtype work|home|other|<String>]
|
||||
# [deleteclearedcontactswithnoemails]
|
||||
def doClearDomainContacts():
|
||||
_clearUpdateContacts(False)
|
||||
@@ -21644,7 +21679,7 @@ def _clearUpdatePeopleContacts(users, updateContacts):
|
||||
Ind.Decrement()
|
||||
|
||||
# gam <UserTypeEntity> clear contacts <PeopleResourceNameEntity>|<PeopleUserContactSelection>
|
||||
# [emailclearpattern <RegularExpression>] [emailcleartype work|home|other|<String>]
|
||||
# [emailclearpattern <REMatchPattern>] [emailcleartype work|home|other|<String>]
|
||||
# [deleteclearedcontactswithnoemails]
|
||||
def clearUserPeopleContacts(users):
|
||||
_clearUpdatePeopleContacts(users, False)
|
||||
@@ -28258,7 +28293,7 @@ def doUpdateChromePolicy():
|
||||
elif vtype == 'TYPE_ENUM':
|
||||
prefix = schema['settings'][lowerField]['enum_prefix']
|
||||
if not value.startswith(prefix):
|
||||
value = "{prefix}{value}"
|
||||
value = f"{prefix}{value}"
|
||||
elif vtype == 'TYPE_LIST':
|
||||
value = value.split(',') if value else []
|
||||
if myarg == 'chrome.users.chromebrowserupdates' and casedField == 'targetVersionPrefixSetting':
|
||||
@@ -28624,7 +28659,7 @@ def doCreateChromePolicyImage():
|
||||
cp = buildGAPIObject(API.CHROMEPOLICY)
|
||||
parent = _getCustomersCustomerIdWithC()
|
||||
schema = getChoice(CHROME_IMAGE_SCHEMAS_MAP, mapChoice=True)
|
||||
parameters = {}
|
||||
parameters = {DFA_URL: None}
|
||||
parameters[DFA_LOCALFILEPATH] = os.path.expanduser(getString(Cmd.OB_FILE_NAME))
|
||||
try:
|
||||
f = open(parameters[DFA_LOCALFILEPATH], 'rb')
|
||||
@@ -31924,7 +31959,7 @@ GROUP_PREVIEW_TITLES = ['group', 'email', 'role', 'action', 'message']
|
||||
# gam update groups <GroupEntity> clear [member] [manager] [owner]
|
||||
# [usersonly|groupsonly]
|
||||
# [notsuspended|suspended] [notarchived|archived]
|
||||
# [emailclearpattern|emailretainpattern <RegularExpression>]
|
||||
# [emailclearpattern|emailretainpattern <REMatchPattern>]
|
||||
# [removedomainnostatusmembers]
|
||||
# [preview] [actioncsv]
|
||||
def doUpdateGroups():
|
||||
@@ -33273,7 +33308,7 @@ def infoGroups(entityList):
|
||||
# [internal] [internaldomains <DomainList>] [external]
|
||||
# [notsuspended|suspended] [notarchived|archived]
|
||||
# [types <GroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [formatjson]
|
||||
def doInfoGroups():
|
||||
infoGroups(getEntityList(Cmd.OB_GROUP_ENTITY))
|
||||
@@ -33484,8 +33519,8 @@ PRINT_GROUPS_JSON_TITLES = ['email', 'JSON']
|
||||
# [([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryUserList>)]))|
|
||||
# (group|group_ns|group_susp <GroupItem>)|
|
||||
# (select <GroupEntity>)]
|
||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
# [descriptionmatchpattern [not] <RegularExpression>] (matchsetting [not] <GroupAttribute>)*
|
||||
# [emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
# [descriptionmatchpattern [not] <REMatchPattern>] (matchsetting [not] <GroupAttribute>)*
|
||||
# [admincreatedmatch <Boolean>]
|
||||
# [maxresults <Number>]
|
||||
# [allfields|([basic] [settings] <GroupFieldName>* [fields <GroupFieldNameList>])]
|
||||
@@ -33497,7 +33532,7 @@ PRINT_GROUPS_JSON_TITLES = ['email', 'JSON']
|
||||
# [includederivedmembership]
|
||||
# [notsuspended|suspended] [notarchived|archived]
|
||||
# [types <GroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [convertcrnl] [delimiter <Character>] [sortheaders]
|
||||
# [formatjson [quotechar <Character>]]
|
||||
# [showitemcountonly]
|
||||
@@ -33528,14 +33563,14 @@ def doPrintGroups():
|
||||
groupSettings.pop(key)
|
||||
if FJQC.formatJSON:
|
||||
row['email'] = groupEntity['email']
|
||||
row['JSON'] = json.dumps(groupEntity, ensure_ascii=False, sort_keys=True)
|
||||
row['JSON'] = json.dumps(cleanJSON(groupEntity), ensure_ascii=False, sort_keys=True)
|
||||
if rolesSet and groupMembers is not None:
|
||||
row['JSON-members'] = json.dumps(groupMembers, ensure_ascii=False, sort_keys=True)
|
||||
if isinstance(groupSettings, dict):
|
||||
row['JSON-settings'] = json.dumps(groupSettings, ensure_ascii=False, sort_keys=True)
|
||||
row['JSON-settings'] = json.dumps(cleanJSON(groupSettings), ensure_ascii=False, sort_keys=True)
|
||||
groupCloudIdentity = ciGroups.get(row['email'], {})
|
||||
if groupCloudIdentity:
|
||||
row['JSON-cloudIdentity'] = json.dumps(groupCloudIdentity, ensure_ascii=False, sort_keys=True)
|
||||
row['JSON-cloudIdentity'] = json.dumps(cleanJSON(groupCloudIdentity, timeObjects=CIGROUP_TIME_OBJECTS), ensure_ascii=False, sort_keys=True)
|
||||
csvPF.WriteRowNoFilter(row)
|
||||
return
|
||||
for field in groupFieldsLists['cd']:
|
||||
@@ -34186,13 +34221,13 @@ GROUPMEMBERS_DEFAULT_FIELDS = ['group', 'type', 'role', 'id', 'status', 'email']
|
||||
# [([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryUserList>)]))|
|
||||
# (group|group_ns|group_susp <GroupItem>)|
|
||||
# (select <GroupEntity>)]
|
||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
# [descriptionmatchpattern [not] <RegularExpression>]
|
||||
# [emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
# [descriptionmatchpattern [not] <REMatchPattern>]
|
||||
# [roles <GroupRoleList>] [members] [managers] [owners]
|
||||
# [internal] [internaldomains <DomainList>] [external]
|
||||
# [notsuspended|suspended] [notarchived|archived]
|
||||
# [types <GroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [membernames] [showdeliverysettings]
|
||||
# <MembersFieldName>* [fields <MembersFieldNameList>]
|
||||
# [userfields <UserFieldNameList>]
|
||||
@@ -34486,13 +34521,13 @@ def doPrintGroupMembers():
|
||||
# [([domain|domains <DomainNameEntity>] ([member|showownedby <EmailItem>]|[(query <QueryGroup>)|(queries <QueryUserList>)]))|
|
||||
# (group|group_ns|group_susp <GroupItem>)|
|
||||
# (select <GroupEntity>)]
|
||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
# [descriptionmatchpattern [not] <RegularExpression>]
|
||||
# [emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
# [descriptionmatchpattern [not] <REMatchPattern>]
|
||||
# [roles <GroupRoleList>] [members] [managers] [owners] [depth <Number>]
|
||||
# [internal] [internaldomains <DomainList>] [external]
|
||||
# [notsuspended|suspended] [notarchived|archived]
|
||||
# [types <GroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [includederivedmembership]
|
||||
def doShowGroupMembers():
|
||||
def _roleOrder(key):
|
||||
@@ -34751,7 +34786,7 @@ def doCreateCIGroup():
|
||||
# <UserTypeEntity>
|
||||
# gam update cigroups <GroupEntity> clear [member] [manager] [owner]
|
||||
# [usersonly|groupsonly]
|
||||
# [emailclearpattern|emailretainpattern <RegularExpression>]
|
||||
# [emailclearpattern|emailretainpattern <REMatchPattern>]
|
||||
# [preview] [actioncsv]
|
||||
def doUpdateCIGroups():
|
||||
|
||||
@@ -35473,7 +35508,7 @@ def getCIGroupMemberTypes(myarg, typesSet):
|
||||
# [roles <GroupRoleList>] [members] [managers] [owners]
|
||||
# [internal] [internaldomains <DomainList>] [external]
|
||||
# [types <CIGroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [formatjson]
|
||||
def doInfoCIGroups():
|
||||
def printCIGroupMemberTree(group_id, showRole):
|
||||
@@ -35810,11 +35845,11 @@ def doInfoCIPolicies():
|
||||
|
||||
# gam print policies [todrive <ToDriveAttribute>*]
|
||||
# [filter <String>] [nowarnings] [noappnames]
|
||||
# [group <RegularExpression>] [ou|org|orgunit <RegularExpression>]
|
||||
# [group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||
# [formatjson [quotechar <Character>]]
|
||||
# gam show policies
|
||||
# [filter <String>] [nowarnings] [noappnames]
|
||||
# [group <RegularExpression>] [ou|org|orgunit <RegularExpression>]
|
||||
# [group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||
# [formatjson]
|
||||
def doPrintShowCIPolicies():
|
||||
|
||||
@@ -35874,14 +35909,14 @@ PRINT_CIGROUPS_JSON_TITLES = ['email', 'JSON']
|
||||
# gam print cigroups [todrive <ToDriveAttribute>*]
|
||||
# [(cimember|ciowner <UserItem>)|(select <GroupEntity>)|(query <String>)]
|
||||
# [showownedby <UserItem>]
|
||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
# [descriptionmatchpattern [not] <RegularExpression>]
|
||||
# [emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
# [descriptionmatchpattern [not] <REMatchPattern>]
|
||||
# [basic|allfields|(<CIGroupFieldName>* [fields <CIGroupFieldNameList>])]
|
||||
# [roles <GroupRoleList>] [memberrestrictions]
|
||||
# [members|memberscount] [managers|managerscount] [owners|ownerscount] [totalcount] [countsonly]
|
||||
# [internal] [internaldomains <DomainList>] [external]
|
||||
# [types <CIGroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [convertcrnl] [delimiter <Character>]
|
||||
# [formatjson [quotechar <Character>]]
|
||||
# [showitemcountonly]
|
||||
@@ -35900,7 +35935,7 @@ def doPrintCIGroups():
|
||||
row = {}
|
||||
if FJQC.formatJSON:
|
||||
row['email'] = groupEntity['groupKey']['id'].lower()
|
||||
row['JSON'] = json.dumps(groupEntity, ensure_ascii=False, sort_keys=True)
|
||||
row['JSON'] = json.dumps(cleanJSON(groupEntity, timeObjects=CIGROUP_TIME_OBJECTS), ensure_ascii=False, sort_keys=True)
|
||||
if rolesSet and groupMembers is not None:
|
||||
row['JSON-members'] = json.dumps(groupMembers, ensure_ascii=False, sort_keys=True)
|
||||
csvPF.WriteRowNoFilter(row)
|
||||
@@ -36328,11 +36363,11 @@ def _getCIListGroupMembersArgs(listView):
|
||||
# gam print cigroup-members [todrive <ToDriveAttribute>*]
|
||||
# [(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
||||
# [showownedby <UserItem>]
|
||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
# [descriptionmatchpattern [not] <RegularExpression>]
|
||||
# [emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
# [descriptionmatchpattern [not] <REMatchPattern>]
|
||||
# [roles <GroupRoleList>] [members] [managers] [owners]
|
||||
# [types <CIGroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# <CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
||||
# [minimal|basic|full]
|
||||
# [(recursive [noduplicates])|includederivedmembership] [nogroupeemail]
|
||||
@@ -36499,12 +36534,12 @@ def doPrintCIGroupMembers():
|
||||
# gam show cigroup-members
|
||||
# [(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
||||
# [showownedby <UserItem>]
|
||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||
# [descriptionmatchpattern [not] <RegularExpression>]
|
||||
# [emailmatchpattern [not] <REMatchPattern>] [namematchpattern [not] <REMatchPattern>]
|
||||
# [descriptionmatchpattern [not] <REMatchPattern>]
|
||||
# [roles <GroupRoleList>] [members] [managers] [owners]
|
||||
# [internal] [internaldomains <DomainList>] [external]
|
||||
# [types <CIGroupMemberTypeList>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||
# [memberemaildisplaypattern|memberemailskippattern <REMatchPattern>]
|
||||
# [minimal|basic|full]
|
||||
# [(depth <Number>) | includederivedmembership]
|
||||
def doShowCIGroupMembers():
|
||||
@@ -38532,7 +38567,7 @@ def _getCalendarEventAttribute(myarg, body, parameters, function):
|
||||
elif myarg == 'description':
|
||||
body['description'] = getStringWithCRsNLs()
|
||||
elif function == 'update' and myarg == 'replacedescription':
|
||||
parameters['replaceDescription'].append((getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0)))
|
||||
parameters['replaceDescription'].append(getREPatternSubstitution(re.IGNORECASE))
|
||||
elif myarg == 'location':
|
||||
body['location'] = getString(Cmd.OB_STRING, minLen=0)
|
||||
elif myarg == 'source':
|
||||
@@ -41057,11 +41092,11 @@ def md5MatchesFile(filename, expected_md5, j=0, jcount=0):
|
||||
|
||||
# gam copy vaultexport|export <ExportItem> matter <MatterItem>
|
||||
# [targetbucket <String>] [targetprefix <String>]
|
||||
# [bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
# [bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
# [copyattempts <Integer>] [retryinterval <Integer>]
|
||||
# gam copy vaultexport|export <MatterItem> <ExportItem>
|
||||
# [targetbucket <String>] [targetprefix <String>]
|
||||
# [bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
# [bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
# [copyattempts <Integer>] [retryinterval <Integer>]
|
||||
def doCopyVaultExport():
|
||||
v = buildGAPIObject(API.VAULT)
|
||||
@@ -41126,11 +41161,11 @@ ZIP_EXTENSION_PATTERN = re.compile(r'^.*\.zip$', re.IGNORECASE)
|
||||
|
||||
# gam download vaultexport|export <ExportItem> matter <MatterItem>
|
||||
# [targetfolder <FilePath>] [targetname <FileName>] [noverify] [noextract] [ziptostdout]
|
||||
# [bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
# [bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
# [downloadattempts <Integer>] [retryinterval <Integer>]
|
||||
# gam download vaultexport|export <MatterItem> <ExportItem>
|
||||
# [targetfolder <FilePath>] [targetname <FileName>] [noverify] [noextract] [ziptostdout]
|
||||
# [bucketmatchpattern <RegularExpression>] [objectmatchpattern <RegularExpression>]
|
||||
# [bucketmatchpattern <REMatchPattern>] [objectmatchpattern <REMatchPattern>]
|
||||
# [downloadattempts <Integer>] [retryinterval <Integer>]
|
||||
def doDownloadVaultExport():
|
||||
def extract_nested_zip(zippedFile):
|
||||
@@ -42835,8 +42870,8 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
||||
notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
||||
elif PwdOpts.ProcessArgument(myarg, notify, notFoundBody):
|
||||
pass
|
||||
elif myarg == 'replace':
|
||||
_getTagReplacement(tagReplacements, True)
|
||||
elif _getTagReplacement(myarg, tagReplacements, True):
|
||||
pass
|
||||
elif myarg == 'admin':
|
||||
value = getBoolean()
|
||||
if updateCmd or value:
|
||||
@@ -42872,18 +42907,7 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
||||
elif updateCmd and myarg == 'updateoufromgroup':
|
||||
groupOrgUnitMap = _getGroupOrgUnitMap()
|
||||
elif updateCmd and myarg == 'updateprimaryemail':
|
||||
search = getString(Cmd.OB_RE_PATTERN)
|
||||
pattern = validateREPattern(search, re.IGNORECASE)
|
||||
replace = getString(Cmd.OB_EMAIL_REPLACEMENT)
|
||||
patternGroups = pattern.groups
|
||||
replSubs = REPLACE_GROUP_PATTERN.findall(replace)
|
||||
for replSub in replSubs:
|
||||
if int(replSub) > patternGroups:
|
||||
Cmd.Backup()
|
||||
usageErrorExit(Msg.MISMATCH_RE_SEARCH_REPLACE_SUBFIELDS.format(pattern.groups, search, int(replSub), replace))
|
||||
updatePrimaryEmail['search'] = search
|
||||
updatePrimaryEmail['pattern'] = pattern
|
||||
updatePrimaryEmail['replace'] = replace
|
||||
updatePrimaryEmail = getREPatternSubstitution(re.IGNORECASE)
|
||||
elif myarg == 'json':
|
||||
body.update(getJSON(USER_JSON_SKIP_FIELDS))
|
||||
if 'name' in body and 'fullName' in body['name']:
|
||||
@@ -43253,9 +43277,9 @@ def createUserAddAliases(cd, user, aliasList, i, count):
|
||||
# [from <EmailAaddress>]
|
||||
# [replyto <EmailAaddress>]
|
||||
# [<NotifyMessageContent>]
|
||||
# (replace <Tag> <UserReplacement>)*]
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
# [logpassword <FileName>] [ignorenullpassword]
|
||||
# [verifynotinvitable]
|
||||
# [addnumericsuffixonduplicate <Number>]
|
||||
def doCreateUser():
|
||||
cd = buildGAPIObject(API.DIRECTORY)
|
||||
@@ -43342,7 +43366,7 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
|
||||
|
||||
# gam <UserTypeEntity> update user <UserAttribute>*
|
||||
# [verifynotinvitable|alwaysevict] [noactionifalias]
|
||||
# [updateprimaryemail <RegularExpression> <EmailReplacement>]
|
||||
# [updateprimaryemail <RESEarchPattern> <RESubstitution>]
|
||||
# [updateoufromgroup <CSVFileInput> [keyfield <FieldName>] [datafield <FieldName>]]
|
||||
# [immutableous <OrgUnitEntity>]|
|
||||
# [clearschema <SchemaName>|<SchemaNameField>]
|
||||
@@ -43354,8 +43378,9 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
|
||||
# [notifypassword <String>]
|
||||
# [from <EmailAaddress>]
|
||||
# [replyto <EmailAaddress>]
|
||||
# [<NotifyMessageContent>]
|
||||
# (replace <Tag> <UserReplacement>)*]
|
||||
# [<NotifyMessageContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
# [notifyonupdate [<Boolean>]]
|
||||
# [logpassword <FileName>] [ignorenullpassword]
|
||||
def updateUsers(entityList):
|
||||
@@ -43398,12 +43423,12 @@ def updateUsers(entityList):
|
||||
'customType': 'former_employee',
|
||||
'primary': False, 'address': userPrimary}]
|
||||
elif updatePrimaryEmail:
|
||||
if updatePrimaryEmail['pattern'].search(user) is not None:
|
||||
body['primaryEmail'] = updatePrimaryEmail['pattern'].sub(updatePrimaryEmail['replace'], user)
|
||||
if updatePrimaryEmail[0].search(user) is not None:
|
||||
body['primaryEmail'] = re.sub(updatePrimaryEmail[0], updatePrimaryEmail[1], user)
|
||||
else:
|
||||
body.pop('primaryEmail', None)
|
||||
if not body:
|
||||
entityActionNotPerformedWarning([Ent.USER, user], Msg.PRIMARY_EMAIL_DID_NOT_MATCH_PATTERN.format(updatePrimaryEmail['search']), i, count)
|
||||
entityActionNotPerformedWarning([Ent.USER, user], Msg.PRIMARY_EMAIL_DID_NOT_MATCH_PATTERN.format(updatePrimaryEmail[0].pattern), i, count)
|
||||
if groupOrgUnitMap:
|
||||
try:
|
||||
groups = callGAPIpages(cd.groups(), 'list', 'groups',
|
||||
@@ -44485,7 +44510,7 @@ USERS_INDEXED_TITLES = ['addresses', 'aliases', 'nonEditableAliases', 'emails',
|
||||
# [userview] [basic|full|allfields | <UserFieldName>* | fields <UserFieldNameList>]
|
||||
# [delimiter <Character>] [sortheaders] [formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||
# [convertcrnl]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
# [showitemcountonly]
|
||||
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||
#
|
||||
@@ -44498,7 +44523,7 @@ USERS_INDEXED_TITLES = ['addresses', 'aliases', 'nonEditableAliases', 'emails',
|
||||
# [userview] [basic|full|allfields | <UserFieldName>* | fields <UserFieldNameList>]
|
||||
# [delimiter <Character>] [sortheaders] [formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||
# [convertcrnl]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
# [showitemcountonly]
|
||||
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||
#
|
||||
@@ -44506,7 +44531,7 @@ USERS_INDEXED_TITLES = ['addresses', 'aliases', 'nonEditableAliases', 'emails',
|
||||
# ([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||
# [limittoou <OrgUnitItem>] [deleted_only|only_deleted])|[select <UserTypeEntity>]
|
||||
# [formatjson [quotechar <Character>]] [countonly]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <RegularExpression>]
|
||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||
# [showitemcountonly]
|
||||
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||
#
|
||||
@@ -47295,7 +47320,7 @@ def _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties, getO
|
||||
return coursesInfo
|
||||
|
||||
# gam print courses [todrive <ToDriveAttribute>*] (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
||||
# [owneremail] [owneremailmatchpattern <RegularExpression>]
|
||||
# [owneremail] [owneremailmatchpattern <REMatchPattern>]
|
||||
# [alias|aliases|aliasesincolumns [delimiter <Character>]]
|
||||
# [show none|all|students|teachers] [countsonly]
|
||||
# [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
||||
@@ -52803,7 +52828,7 @@ def getDriveFileAttribute(myarg, body, parameters, updateCmd):
|
||||
elif myarg =='stripnameprefix':
|
||||
parameters[DFA_STRIPNAMEPREFIX] = getString(Cmd.OB_STRING, minLen=0)
|
||||
elif myarg == 'replacefilename':
|
||||
parameters[DFA_REPLACEFILENAME].append((getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0)))
|
||||
parameters[DFA_REPLACEFILENAME].append(getREPatternSubstitution(re.IGNORECASE))
|
||||
elif myarg in {'convert', 'ocr'}:
|
||||
deprecatedArgument(myarg)
|
||||
stderrWarningMsg(Msg.USE_MIMETYPE_TO_SPECIFY_GOOGLE_FORMAT)
|
||||
@@ -55321,6 +55346,12 @@ class DriveListParameters():
|
||||
def GetFileMatchingPermission(self, fileInfo):
|
||||
return self.PM.GetMatchingPermissions(fileInfo.get('permissions', []))
|
||||
|
||||
def _getGettingEntity(user, fileIdEntity):
|
||||
driveId = fileIdEntity.get('shareddrive', {}).get('driveId', None)
|
||||
if not driveId:
|
||||
return user
|
||||
return f"{user} on {Ent.Singular(Ent.SHAREDDRIVE_ID)}: {driveId}"
|
||||
|
||||
OWNED_BY_ME_FIELDS_TITLES = ['ownedByMe']
|
||||
FILELIST_FIELDS_TITLES = ['id', 'name', 'mimeType', 'parents']
|
||||
DRIVE_INDEXED_TITLES = ['parents', 'path', 'permissions']
|
||||
@@ -55351,7 +55382,7 @@ SIZE_FIELD_CHOICE_MAP = {
|
||||
# [anyowner|(showownedby any|me|others)]
|
||||
# [showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>] [mimetypeinquery [<Boolean>]]
|
||||
# [sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
# [filenamematchpattern <RegularExpression>]
|
||||
# [filenamematchpattern <REMatchPattern>]
|
||||
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>] [pmfilter] [oneitemperrow]
|
||||
# [excludetrashed]
|
||||
# [maxfiles <Integer>] [nodataheaders <String>]
|
||||
@@ -55849,7 +55880,8 @@ def printFileList(users):
|
||||
mimeTypeInfo = {}
|
||||
getSharedDriveACLsCount = 0
|
||||
if buildTree:
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, user, i, count, query=DLP.fileIdEntity['query'])
|
||||
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count, query=DLP.fileIdEntity['query'])
|
||||
if not incrementalPrint:
|
||||
fileTree, status = initFileTree(drive, fileIdEntity.get('shareddrive'), DLP, shareddriveFields, showParent, user, i, count)
|
||||
if not status:
|
||||
@@ -56450,7 +56482,7 @@ def printFileParentTree(users):
|
||||
# [anyowner|(showownedby any|me|others)]
|
||||
# [showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
# [sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
# [filenamematchpattern <RegularExpression>]
|
||||
# [filenamematchpattern <REMatchPattern>]
|
||||
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
# [excludetrashed] (addcsvdata <FieldName> <String>)*
|
||||
# [showsize] [showmimetypesize] [showlastmodification]
|
||||
@@ -56464,7 +56496,7 @@ def printFileParentTree(users):
|
||||
# [anyowner|(showownedby any|me|others)]
|
||||
# [showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
# [sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
# [filenamematchpattern <RegularExpression>]
|
||||
# [filenamematchpattern <REMatchPattern>]
|
||||
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
# [excludetrashed]
|
||||
# [showsize] [showmimetypesize] [showlastmodification]
|
||||
@@ -56623,7 +56655,8 @@ def printShowFileCounts(users):
|
||||
userLastModification = {
|
||||
'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
||||
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME}
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, user, i, count, query=DLP.fileIdEntity['query'])
|
||||
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count, query=DLP.fileIdEntity['query'])
|
||||
try:
|
||||
feed = yieldGAPIpages(drive.files(), 'list', 'files',
|
||||
pageMessage=getPageMessageForWhom(),
|
||||
@@ -56982,7 +57015,8 @@ def printShowFileShareCounts(users):
|
||||
if not drive:
|
||||
continue
|
||||
userShareCounts = FILESHARECOUNTS_ZEROCOUNTS.copy()
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, user, i, count, query=query)
|
||||
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count, query=query)
|
||||
try:
|
||||
feed = yieldGAPIpages(drive.files(), 'list', 'files',
|
||||
pageMessage=getPageMessageForWhom(),
|
||||
@@ -57045,7 +57079,7 @@ FILETREE_FIELDS_PRINT_ORDER = ['id', 'parents', 'owners', 'mimeType', 'size', 'e
|
||||
# [anyowner|(showownedby any|me|others)]
|
||||
# [showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
# [sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
# [filenamematchpattern <RegularExpression>]
|
||||
# [filenamematchpattern <REMatchPattern>]
|
||||
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
# [excludetrashed]
|
||||
# [fields <FileTreeFieldNameList>]
|
||||
@@ -57056,7 +57090,7 @@ FILETREE_FIELDS_PRINT_ORDER = ['id', 'parents', 'owners', 'mimeType', 'size', 'e
|
||||
# [anyowner|(showownedby any|me|others)]
|
||||
# [showmimetype [not] <MimeTypeList>] [showmimetype category <MimeTypeNameList>]
|
||||
# [sizefield quotabytesused|size] [minimumfilesize <Integer>] [maximumfilesize <Integer>]
|
||||
# [filenamematchpattern <RegularExpression>]
|
||||
# [filenamematchpattern <REMatchPattern>]
|
||||
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||
# [excludetrashed]
|
||||
# [fields <FileTreeFieldNameList>]
|
||||
@@ -57246,7 +57280,8 @@ def printShowFileTree(users):
|
||||
fileTree, status = initFileTree(drive, fileIdEntity.get('shareddrive'), DLP, shareddriveFields, True, user, i, count)
|
||||
if not status:
|
||||
continue
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, user, i, count, query=DLP.fileIdEntity['query'])
|
||||
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
||||
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count, query=DLP.fileIdEntity['query'])
|
||||
try:
|
||||
feed = yieldGAPIpages(drive.files(), 'list', 'files',
|
||||
pageMessage=getPageMessageForWhom(),
|
||||
@@ -57283,6 +57318,9 @@ def printShowFileTree(users):
|
||||
fileEntryInfo = callGAPI(drive.files(), 'get',
|
||||
throwReasons=GAPI.DRIVE_GET_THROW_REASONS,
|
||||
fileId=fileId, fields=fields, supportsAllDrives=True)
|
||||
if (fileEntryInfo['mimeType'] == MIMETYPE_GA_FOLDER and fileEntryInfo.get('driveId') and
|
||||
fileEntryInfo['name'] == TEAM_DRIVE and not fileEntryInfo.get('parents', [])):
|
||||
fileEntryInfo['name'] = f"{SHARED_DRIVES}/{_getSharedDriveNameFromId(fileId)}"
|
||||
if stripCRsFromName:
|
||||
fileEntryInfo['name'] = _stripControlCharsFromName(fileEntryInfo['name'])
|
||||
if buildTree:
|
||||
@@ -57367,7 +57405,7 @@ createReturnItemMap = {
|
||||
|
||||
# gam <UserTypeEntity> create drivefile
|
||||
# [(localfile <FileName>|-)|(url <URL>)]
|
||||
# [(drivefilename|newfilename <DriveFileName>) | (replacefilename <RegularExpression> <String>)*]
|
||||
# [(drivefilename|newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||
# [stripnameprefix <String>]
|
||||
# [timestamp <Boolean>]] [timeformat <String>]
|
||||
# <DriveFileCreateAttribute>* [noduplicate]
|
||||
@@ -57895,7 +57933,7 @@ def checkDriveFileShortcut(users):
|
||||
|
||||
# gam <UserTypeEntity> update drivefile <DriveFileEntity> [copy] [returnidonly|returnlinkonly]
|
||||
# [(localfile <FileName>|-)|(url <URL>)]
|
||||
# [retainname | (newfilename <DriveFileName>) | (replacefilename <RegularExpression> <String>)*]
|
||||
# [retainname | (newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||
# [stripnameprefix <String>]
|
||||
# [timestamp <Boolean>]] [timeformat <String>]
|
||||
# <DriveFileUpdateAttribute>*
|
||||
@@ -58360,7 +58398,7 @@ def getCopyMoveOptions(myarg, copyMoveOptions):
|
||||
elif myarg =='stripnameprefix':
|
||||
copyMoveOptions['stripNamePrefix'] = getString(Cmd.OB_STRING, minLen=0)
|
||||
elif myarg == 'replacefilename':
|
||||
copyMoveOptions['replaceFilename'].append((getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0)))
|
||||
copyMoveOptions['replaceFilename'].append(getREPatternSubstitution(re.IGNORECASE))
|
||||
elif myarg == 'showpermissionmessages':
|
||||
copyMoveOptions['showPermissionMessages'] = getBoolean()
|
||||
elif myarg == 'sendemailifrequired':
|
||||
@@ -59000,7 +59038,7 @@ copyReturnItemMap = {
|
||||
}
|
||||
|
||||
# gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
||||
# [newfilename <DriveFileName>] (replacefilename <RegularExpression> <String>)*
|
||||
# [newfilename <DriveFileName>] (replacefilename <REMatchPattern> <RESubstitution>)*
|
||||
# [stripnameprefix <String>]
|
||||
# [excludetrashed]
|
||||
# [(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*)) |
|
||||
@@ -59010,9 +59048,9 @@ copyReturnItemMap = {
|
||||
# [mergewithparent [<Boolean>]] [recursive [depth <Number>]]
|
||||
# <DriveFileCopyAttribute>*
|
||||
# [skipids <DriveFileEntity>]
|
||||
# [copysubfiles [<Boolean>]] [filenamematchpattern <RegularExpression>] [filemimetype [not] <MimeTypeList>]
|
||||
# [copysubfolders [<Boolean>]] [foldernamematchpattern <RegularExpression>]
|
||||
# [copysubshortcuts [<Boolean>]] [shortcutnamematchpattern <RegularExpression>]
|
||||
# [copysubfiles [<Boolean>]] [filenamematchpattern <REMatchPattern>] [filemimetype [not] <MimeTypeList>]
|
||||
# [copysubfolders [<Boolean>]] [foldernamematchpattern <REMatchPattern>]
|
||||
# [copysubshortcuts [<Boolean>]] [shortcutnamematchpattern <REMatchPattern>]
|
||||
# [duplicatefiles overwriteolder|overwriteall|duplicatename|uniquename|skip]
|
||||
# [duplicatefolders merge|duplicatename|uniquename|skip]
|
||||
# [copiedshortcutspointtocopiedfiles [<Boolean>]]
|
||||
@@ -65040,13 +65078,13 @@ SHAREDDRIVE_ACL_ROLES_MAP = {
|
||||
|
||||
# gam <UserTypeEntity> print shareddrives [todrive <ToDriveAttribute>*]
|
||||
# [asadmin [shareddriveadminquery|query <QuerySharedDrive>]]
|
||||
# [matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# (role|roles <SharedDriveACLRoleList>)*
|
||||
# [fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
# [guiroles [<Boolean>]] [formatjson [quotechar <Character>]]
|
||||
# gam <UserTypeEntity> show shareddrives
|
||||
# [asadmin [shareddriveadminquery|query <QuerySharedDrive>]]
|
||||
# [matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# [matchname <REMatchPattrn>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# (role|roles <SharedDriveACLRoleLIst>)*
|
||||
# [fields <SharedDriveFieldNameList>] [noorgunits [<Boolean>]]
|
||||
# [guiroles [<Boolean>]] [formatjson]
|
||||
@@ -65340,7 +65378,7 @@ SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP = {
|
||||
|
||||
# gam [<UserTypeEntity>] print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||
# [asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
||||
# [matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# [user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
# <PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
# [oneitemperrow] [maxitems <Integer>]
|
||||
@@ -65350,7 +65388,7 @@ SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP = {
|
||||
# [formatjson [quotechar <Character>]]
|
||||
# gam [<UserTypeEntity>] show shareddriveacls
|
||||
# [asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
|
||||
# [matchname <RegularExpression>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
||||
# [user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
||||
# <PermissionMatch>* [<PermissionMatchAction>] [pmselect]
|
||||
# [oneitemperrow] [maxitems <Integer>]
|
||||
@@ -66110,7 +66148,7 @@ def checkUserGroupMatchPattern(groupEmail, matchPattern):
|
||||
|
||||
# gam <UserTypeEntity> delete group|groups
|
||||
# [(domain <DomainName>)|(customerid <CustomerID>)|
|
||||
# (emailmatchpattern [not] <RegularExpression>)|<GroupEntity>]
|
||||
# (emailmatchpattern [not] <REMatchPattern>)|<GroupEntity>]
|
||||
def deleteUserFromGroups(users):
|
||||
cd = buildGAPIObject(API.DIRECTORY)
|
||||
groupKeys = None
|
||||
@@ -68650,7 +68688,8 @@ def cleanLabelQuery(labelQuery):
|
||||
labelQuery = labelQuery.replace(ch, '-')
|
||||
return labelQuery.lower()
|
||||
|
||||
# gam <UserTypeEntity> update label|labels [search <RegularExpression>] [replace <LabelReplacement>] [merge [keepoldlabel]]
|
||||
# gam <UserTypeEntity> update label|labels
|
||||
# [search <REMatchPattern>] [replace <RESubstitution>] [merge [keepoldlabel]]
|
||||
# search defaults to '^Inbox/(.*)$' which will find all labels in the Inbox
|
||||
# replace defaults to '%s'
|
||||
def updateLabels(users):
|
||||
@@ -68665,7 +68704,7 @@ def updateLabels(users):
|
||||
pattern = validateREPattern(search, re.IGNORECASE)
|
||||
elif myarg == 'replace':
|
||||
replaceLocation = Cmd.Location()
|
||||
replace = getString(Cmd.OB_LABEL_REPLACEMENT)
|
||||
replace = getString(Cmd.OB_RE_SUBSTITUTION)
|
||||
elif myarg == 'merge':
|
||||
merge = True
|
||||
elif myarg == 'keepoldlabel':
|
||||
@@ -68675,12 +68714,8 @@ def updateLabels(users):
|
||||
# Validate that number of substitions in replace matches the number of groups in pattern
|
||||
useRegexSub = replace.find('%s') == -1
|
||||
if useRegexSub:
|
||||
patternGroups = pattern.groups
|
||||
replSubs = REPLACE_GROUP_PATTERN.findall(replace)
|
||||
for replSub in replSubs:
|
||||
if int(replSub) > patternGroups:
|
||||
Cmd.SetLocation(replaceLocation)
|
||||
usageErrorExit(Msg.MISMATCH_RE_SEARCH_REPLACE_SUBFIELDS.format(pattern.groups, search, int(replSub), replace))
|
||||
Cmd.SetLocation(replaceLocation)
|
||||
validateREPatternSubstitution(pattern, replace)
|
||||
else:
|
||||
if pattern.groups != replace.count('%s'):
|
||||
Cmd.SetLocation(replaceLocation)
|
||||
@@ -68702,7 +68737,10 @@ def updateLabels(users):
|
||||
match_result = pattern.match(label['name'])
|
||||
if match_result is not None:
|
||||
labelMatches += 1
|
||||
newLabelName = pattern.sub(replace, label['name']) if useRegexSub else replace % match_result.groups()
|
||||
if useRegexSub:
|
||||
newLabelName = pattern.sub(replace, label['name'])
|
||||
else:
|
||||
newLabelName = replace % match_result.groups()
|
||||
newLabelNameLower = newLabelName.lower()
|
||||
try:
|
||||
Act.Set(Act.RENAME)
|
||||
@@ -68835,7 +68873,7 @@ def deleteLabels(users, labelEntity):
|
||||
except (GAPI.serviceNotAvailable, GAPI.badRequest):
|
||||
userGmailServiceNotEnabledWarning(user, i, count)
|
||||
|
||||
# gam <UserTypeEntity> delete label|labels <LabelName>|regex:<RegularExpression>
|
||||
# gam <UserTypeEntity> delete label|labels <LabelName>|regex:<REMatchPattern>
|
||||
def deleteLabel(users):
|
||||
deleteLabels(users, getStringReturnInList(Cmd.OB_LABEL_NAME))
|
||||
|
||||
@@ -69991,8 +70029,8 @@ def _draftImportInsertMessage(users, operation):
|
||||
internalDateSource = 'dateHeader'
|
||||
if checkArgumentPresent('emlutf8'):
|
||||
emlEncoding = UTF8
|
||||
elif myarg == 'replace':
|
||||
_getTagReplacement(tagReplacements, True)
|
||||
elif _getTagReplacement(myarg, tagReplacements, True):
|
||||
pass
|
||||
elif operation in IMPORT_INSERT and myarg == 'addlabel':
|
||||
addLabelNames.append(getString(Cmd.OB_LABEL_NAME, minLen=1))
|
||||
elif operation in IMPORT_INSERT and myarg == 'labels':
|
||||
@@ -70127,7 +70165,9 @@ def _draftImportInsertMessage(users, operation):
|
||||
userGmailServiceNotEnabledWarning(user, i, count)
|
||||
|
||||
# gam <UserTypeEntity> draft message
|
||||
# <MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
# <MessageContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
# (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
# (attach <FileName> [charset <CharSet>])*
|
||||
# (embedimage <FileName> <String>)*
|
||||
@@ -70135,7 +70175,9 @@ def draftMessage(users):
|
||||
_draftImportInsertMessage(users, 'draft')
|
||||
|
||||
# gam <UserTypeEntity> import message
|
||||
# <MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
# <MessageContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
# (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
# (addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
# (attach <FileName> [charset <CharSet>])*
|
||||
@@ -70145,7 +70187,9 @@ def importMessage(users):
|
||||
_draftImportInsertMessage(users, 'import')
|
||||
|
||||
# gam <UserTypeEntity> insert message
|
||||
# <MessageContent> (replace <Tag> <UserReplacement>)*
|
||||
# <MessageContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
||||
# (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||
# (addlabel <LabelName>)* [labels <LabelNameList>]
|
||||
# (attach <FileName> [charset <CharSet>])*
|
||||
@@ -70955,21 +70999,21 @@ def printShowMessagesThreads(users, entityType):
|
||||
|
||||
# gam <UserTypeEntity> print message|messages [todrive <ToDriveAttribute>*]
|
||||
# (((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])* [quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
# [labelmatchpattern <RegularExpression>] [sendermatchpattern <RegularExpression>]
|
||||
# [labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
# [headers all|<SMTPHeaderList>] [dateheaderformat iso|rfc2822|<String>] [dateheaderconverttimezone [<Boolean>]]
|
||||
# [showlabels] [showbody] [showhtml] [showdate] [showsize] [showsnippet]
|
||||
# [convertcrnl] [delimiter <Character>]
|
||||
# [countsonly|positivecountsonly] [useronly]
|
||||
# [[attachmentnamepattern <RegularExpression>]
|
||||
# [[attachmentnamepattern <REMatchPattern>]
|
||||
# [showattachments [noshowtextplain]]]
|
||||
# (addcsvdata <FieldName> <String>)*
|
||||
# gam <UserTypeEntity> show message|messages
|
||||
# (((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])* [quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <MessageIDEntity>)
|
||||
# [labelmatchpattern <RegularExpression>] [sendermatchpattern <RegularExpression>]
|
||||
# [labelmatchpattern <REMatchPattern>] [sendermatchpattern <REMatchPattern>]
|
||||
# [headers all|<SMTPHeaderList>] [dateheaderformat iso|rfc2822|<String>] [dateheaderconverttimezone [<Boolean>]]
|
||||
# [showlabels] [showbody] [showhtml] [showdate] [showsize] [showsnippet]
|
||||
# [countsonly|positivecountsonly] [useronly]
|
||||
# [[attachmentnamepattern <RegularExpression>]
|
||||
# [[attachmentnamepattern <REMatchPattern>]
|
||||
# [showattachments [noshowtextplain]]
|
||||
# [saveattachments [targetfolder <FilePath>] [overwrite [<Boolean>]]]
|
||||
# [uploadattachments [<DriveFileParentAttribute>]]]
|
||||
@@ -70978,21 +71022,21 @@ def printShowMessages(users):
|
||||
|
||||
# gam <UserTypeEntity> print thread|threads [todrive <ToDriveAttribute>*]
|
||||
# (((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])* [quick|notquick] [max_to_print <Number>] [includespamtrash])|(ids <ThreadIDEntity>)
|
||||
# [labelmatchpattern <RegularExpression>]
|
||||
# [labelmatchpattern <REMatchPattern>]
|
||||
# [headers all|<SMTPHeaderList>] [dateheaderformat iso|rfc2822|<String>] [dateheaderconverttimezone [<Boolean>]]
|
||||
# [showlabels] [showbody] [showhtml] [showdate] [showsize] [showsnippet]
|
||||
# [convertcrnl] [delimiter <Character>]
|
||||
# [countsonly|positivecountsonly] [useronly]
|
||||
# [[attachmentnamepattern <RegularExpression>]
|
||||
# [[attachmentnamepattern <REMatchPattern>]
|
||||
# [showattachments [noshowtextplain]]]
|
||||
# (addcsvdata <FieldName> <String>)*
|
||||
# gam <UserTypeEntity> show thread|threads
|
||||
# (((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])* [quick|notquick] [max_to_show <Number>] [includespamtrash])|(ids <ThreadIDEntity>)
|
||||
# [labelmatchpattern <RegularExpression>]
|
||||
# [labelmatchpattern <REMatchPattern>]
|
||||
# [headers all|<SMTPHeaderList>] [dateheaderformat iso|rfc2822|<String>] [dateheaderconverttimezone [<Boolean>]]
|
||||
# [showlabels] [showbody] [showhtml] [showdate] [showsize] [showsnippet]
|
||||
# [countsonly|positivecountsonly] [useronly]
|
||||
# [[attachmentnamepattern <RegularExpression>]
|
||||
# [[attachmentnamepattern <REMatchPattern>]
|
||||
# [showattachments [noshowtextplain]]
|
||||
# [saveattachments [targetfolder <FilePath>] [overwrite [<Boolean>]]]
|
||||
# [uploadattachments [<DriveFileParentAttribute>]]]
|
||||
@@ -72432,8 +72476,8 @@ def _processSendAs(user, i, count, entityType, emailAddress, j, jcount, gmail, f
|
||||
return userDefined
|
||||
|
||||
def getSendAsAttributes(myarg, body, tagReplacements):
|
||||
if myarg == 'replace':
|
||||
_getTagReplacement(tagReplacements, True)
|
||||
if _getTagReplacement(myarg, tagReplacements, True):
|
||||
pass
|
||||
elif myarg == 'name':
|
||||
body['displayName'] = getString(Cmd.OB_NAME, minLen=0)
|
||||
elif myarg == 'replyto':
|
||||
@@ -72452,13 +72496,17 @@ SMTPMSA_SECURITY_MODES = ['none', 'ssl', 'starttls']
|
||||
SMTPMSA_REQUIRED_FIELDS = ['host', 'port', 'username', 'password']
|
||||
|
||||
# gam <UserTypeEntity> [create] sendas <EmailAddress> [name] <String>
|
||||
# [<SendAsContent> (replace <Tag> <UserReplacement>)*]
|
||||
# [<SendAsContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
# [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
# [smtpmsa.host <SMTPHostName> smtpmsa.port 25|465|587
|
||||
# smtpmsa.username <UserName> smtpmsa.password <Password>
|
||||
# [smtpmsa.securitymode none|ssl|starttls]]
|
||||
# gam <UserTypeEntity> update sendas <EmailAddress> [name <String>]
|
||||
# [<SendAsContent> (replace <Tag> <UserReplacement>)*]
|
||||
# [<SendAsContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
# [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
def createUpdateSendAs(users):
|
||||
updateCmd = Act.Get() == Act.UPDATE
|
||||
@@ -73295,6 +73343,7 @@ def printShowCSEKeyPairs(users):
|
||||
# gam <UserTypeEntity> signature|sig
|
||||
# <SignatureContent>
|
||||
# (replace <Tag> <String>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||
# [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
||||
# [name <String>]
|
||||
# [primary]
|
||||
@@ -73388,7 +73437,9 @@ def _showVacation(user, i, count, result, showDisabled, sigReplyFormat):
|
||||
Ind.Decrement()
|
||||
|
||||
# gam <UserTypeEntity> vacation [<Boolean>] [subject <String>]
|
||||
# [<VacationMessageContent> (replace <Tag> <UserReplacement>)*]
|
||||
# [<VacationMessageContent>
|
||||
# (replace <Tag> <UserReplacement>)*
|
||||
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
||||
# [html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
|
||||
# [start|startdate <Date>|Started] [end|enddate <Date>|NotSpecified]
|
||||
def setVacation(users):
|
||||
@@ -73406,8 +73457,8 @@ def setVacation(users):
|
||||
message, _, html = getStringOrFile(myarg)
|
||||
if html:
|
||||
responseBodyType = 'responseBodyHtml'
|
||||
elif myarg == 'replace':
|
||||
_getTagReplacement(tagReplacements, True)
|
||||
elif _getTagReplacement(myarg, tagReplacements, True):
|
||||
pass
|
||||
elif myarg == 'html':
|
||||
if getBoolean():
|
||||
responseBodyType = 'responseBodyHtml'
|
||||
|
||||
@@ -952,7 +952,6 @@ class GamCLArgs():
|
||||
OB_LABEL_ID_LIST = 'LabelIDLIst'
|
||||
OB_LABEL_NAME = 'LabelName'
|
||||
OB_LABEL_NAME_LIST = 'LabelNameList'
|
||||
OB_LABEL_REPLACEMENT = 'LabelReplacement'
|
||||
OB_LANGUAGE_LIST = 'LanguageList'
|
||||
OB_LOOKERSTUDIO_PERMISSION_ENTITY = 'LookerStudioPermissionEntity'
|
||||
OB_MATTER_ITEM = 'MatterItem'
|
||||
@@ -991,6 +990,7 @@ class GamCLArgs():
|
||||
OB_RESOURCE_ENTITY = 'ResourceEntity'
|
||||
OB_RESOURCE_ID = 'ResourceID'
|
||||
OB_RE_PATTERN = 'REPattern'
|
||||
OB_RE_SUBSTITUTION = 'RESubstitution'
|
||||
OB_ROLE_ASSIGNMENT_ID = 'RoleAssignmentID'
|
||||
OB_ROLE_ITEM = 'RoleItem'
|
||||
OB_ROLE_LIST = 'RoleList'
|
||||
|
||||
Reference in New Issue
Block a user