mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-22 23:21:37 +00:00
Compare commits
3 Commits
20250304.0
...
v7.05.10
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4dea95f08 | ||
|
|
7b59b648c7 | ||
|
|
d791a864fa |
@@ -1,3 +1,23 @@
|
||||
7.05.10
|
||||
|
||||
Updated various chat space commands to handle the following error:
|
||||
```
|
||||
ERROR: 503: serviceNotAvailable - The service is currently unavailable
|
||||
```
|
||||
|
||||
7.05.09
|
||||
|
||||
Fixed bug in `gam calendars <CalendarEntity> print events matchfield attendeesstatus required accepted resource_calendar@resource.calendar.google.com`
|
||||
that caused a trap.
|
||||
|
||||
7.05.08
|
||||
|
||||
Added error message to `gam report` commands to indicate forbidden access;
|
||||
previously, no error message was displayed.
|
||||
```
|
||||
ERROR: Customer ID: C012abc34, Caller does not have access to the customers reporting data.
|
||||
```
|
||||
|
||||
7.05.07
|
||||
|
||||
Fixed bug in `gam calendars <CalendarEntity> info events` and `gam <UserTypeEntity> info events`
|
||||
|
||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
||||
"""
|
||||
|
||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||
__version__ = '7.05.07'
|
||||
__version__ = '7.05.09'
|
||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||
|
||||
#pylint: disable=wrong-import-position
|
||||
@@ -909,6 +909,8 @@ def getBoolean(defaultValue=True):
|
||||
Cmd.Advance()
|
||||
return False
|
||||
if defaultValue is not None:
|
||||
if not Cmd.Current().strip(): # If current argument is empty, skip over it
|
||||
Cmd.Advance()
|
||||
return defaultValue
|
||||
invalidChoiceExit(boolean, TRUE_FALSE, False)
|
||||
if defaultValue is not None:
|
||||
@@ -1482,6 +1484,8 @@ def getInteger(minVal=None, maxVal=None, default=None):
|
||||
return number
|
||||
except ValueError:
|
||||
if default is not None:
|
||||
if not Cmd.Current().strip(): # If current argument is empty, skip over it
|
||||
Cmd.Advance()
|
||||
return default
|
||||
invalidArgumentExit(integerLimits(minVal, maxVal))
|
||||
elif default is not None:
|
||||
@@ -11842,7 +11846,7 @@ def doCreateProject():
|
||||
# Try to set policy on project to allow Service Account Key Upload
|
||||
# orgp = getAPIService(API.ORGPOLICY, httpObj)
|
||||
# projectParent = f"projects/{projectInfo['projectId']}"
|
||||
# policyName = f'{projectParent}/policies/iam.disableServiceAccountKeyUpload'
|
||||
# policyName = f'{projectParent}/policies/iam.managed.disableServiceAccountKeyUpload'
|
||||
# try:
|
||||
# result = callGAPI(orgp.projects().policies(), 'get',
|
||||
# throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.PERMISSION_DENIED],
|
||||
@@ -12646,7 +12650,7 @@ def doProcessSvcAcctKeys(mode=None, iam=None, projectId=None, clientEmail=None,
|
||||
return False
|
||||
except GAPI.failedPrecondition as e:
|
||||
entityActionFailedWarning([Ent.PROJECT, projectId, Ent.SVCACCT, clientEmail], str(e))
|
||||
if 'iam.disableServiceAccountKeyUpload' not in str(e):
|
||||
if 'iam.disableServiceAccountKeyUpload' not in str(e) and 'iam.managed.disableServiceAccountKeyUpload' not in str(e):
|
||||
return False
|
||||
if retry == maxRetries or mode != 'upload':
|
||||
sys.stdout.write(Msg.ENABLE_SERVICE_ACCOUNT_PRIVATE_KEY_UPLOAD.format(projectId))
|
||||
@@ -13429,8 +13433,8 @@ def doReportUsage():
|
||||
break
|
||||
except GAPI.invalidInput as e:
|
||||
systemErrorExit(GOOGLE_API_ERROR_RC, str(e))
|
||||
except GAPI.forbidden:
|
||||
accessErrorExit(None)
|
||||
except GAPI.forbidden as e:
|
||||
accessErrorExit(None, str(e))
|
||||
if startUseDate:
|
||||
reportName = f'{report.capitalize()} Usage Report - {startUseDate}:{endUseDate}'
|
||||
else:
|
||||
@@ -14027,8 +14031,8 @@ def doReport():
|
||||
printErrorMessage(BAD_REQUEST_RC, Msg.BAD_REQUEST)
|
||||
exitUserLoop = True
|
||||
break
|
||||
except GAPI.forbidden:
|
||||
accessErrorExit(None)
|
||||
except GAPI.forbidden as e:
|
||||
accessErrorExit(None, str(e))
|
||||
startDateTime += oneDay
|
||||
if exitUserLoop:
|
||||
break
|
||||
@@ -14108,8 +14112,8 @@ def doReport():
|
||||
continue
|
||||
except GAPI.invalidInput as e:
|
||||
systemErrorExit(GOOGLE_API_ERROR_RC, str(e))
|
||||
except GAPI.forbidden:
|
||||
accessErrorExit(None)
|
||||
except GAPI.forbidden as e:
|
||||
accessErrorExit(None, str(e))
|
||||
startDateTime += oneDay
|
||||
csvPF.writeCSVfile(f'Customer Report - {tryDate}')
|
||||
else: # activityReports
|
||||
@@ -26380,6 +26384,7 @@ def printShowChatSpaces(users):
|
||||
bailOnInternalError=True,
|
||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
||||
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
fields=fields, pageSize=CHAT_PAGE_SIZE, **kwargsCS)
|
||||
except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError, GAPI.permissionDenied) as e:
|
||||
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
||||
@@ -26798,6 +26803,7 @@ def syncChatMembers(users):
|
||||
members = callGAPIpages(chat.spaces().members(), 'list', 'memberships',
|
||||
pageMessage=_getChatPageMessage(Ent.CHAT_MEMBER, user, i, count, qfilter),
|
||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
parent=parent, showGroups=groupsSpecified, pageSize=CHAT_PAGE_SIZE, **kwargs, **kwargsUAA)
|
||||
for member in members:
|
||||
if 'member' in member:
|
||||
@@ -26995,6 +27001,7 @@ def printShowChatMembers(users):
|
||||
bailOnInternalError=True,
|
||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
||||
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
||||
**kwargsCS)
|
||||
for space in spaces:
|
||||
@@ -27011,6 +27018,7 @@ def printShowChatMembers(users):
|
||||
bailOnInternalError=True,
|
||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
||||
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
||||
**kwargsCS)
|
||||
for space in spaces:
|
||||
@@ -27355,6 +27363,7 @@ def printShowChatMessages(users):
|
||||
messages = callGAPIpages(chat.spaces().messages(), 'list', 'messages',
|
||||
pageMessage=_getChatPageMessage(Ent.CHAT_MESSAGE, user, i, count, qfilter),
|
||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
pageSize=CHAT_PAGE_SIZE, parent=parentName, filter=pfilter, showDeleted=showDeleted,
|
||||
fields=fields)
|
||||
for message in messages:
|
||||
@@ -27472,6 +27481,7 @@ def printShowChatEvents(users):
|
||||
events = callGAPIpages(chat.spaces().spaceEvents(), 'list', 'spaceEvents',
|
||||
pageMessage=_getChatPageMessage(Ent.CHAT_EVENT, user, i, count, qfilter),
|
||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
pageSize=CHAT_PAGE_SIZE, parent=parentName, filter=pfilter)
|
||||
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
||||
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
||||
@@ -38688,7 +38698,7 @@ def _getEventMatchFields(calendarEventEntity, fieldsList):
|
||||
else:
|
||||
fieldsList.append('attendees/email')
|
||||
if match[0][1] == 'status':
|
||||
fieldsList.extend('attendees/optional', 'attendees/responseStatus')
|
||||
fieldsList.extend(['attendees/optional', 'attendees/responseStatus'])
|
||||
|
||||
def _eventMatches(event, match):
|
||||
if match[0][0] != 'attendees':
|
||||
@@ -43027,7 +43037,7 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
||||
if value:
|
||||
entry[argument] = value
|
||||
else:
|
||||
entry[argument] = getInteger(minVal=0, maxVal=100000)
|
||||
entry[argument] = getInteger(minVal=0, maxVal=100000, default=0)
|
||||
elif primaryNotPrimary(argument, entry):
|
||||
break
|
||||
else:
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
_PRODUCTS = {
|
||||
'101001': 'Cloud Identity Free',
|
||||
'101005': 'Cloud Identity Premium',
|
||||
'101007': 'Google Workspace for Education',
|
||||
'101031': 'Google Workspace for Education',
|
||||
'101033': 'Google Voice',
|
||||
'101034': 'Google Workspace Archived User',
|
||||
@@ -47,6 +48,10 @@ _SKUS = {
|
||||
'product': '101001', 'aliases': ['identity', 'cloudidentity'], 'displayName': 'Cloud Identity'},
|
||||
'1010050001': {
|
||||
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
||||
'1010070001': {
|
||||
'product': '101007', 'aliases': ['gwef', 'workspaceeducationfundamentals'], 'displayName': 'Google Workspace for Education Fundamentals'},
|
||||
'1010070004': {
|
||||
'product': '101007', 'aliases': ['gwegmo', 'workspaceeducationgmailonly'], 'displayName': 'Google Workspace for Education Gmail Only'},
|
||||
'1010310002': {
|
||||
'product': '101031', 'aliases': ['gsefe', 'e4e', 'gsuiteenterpriseeducation'], 'displayName': 'Google Workspace for Education Plus - Legacy'},
|
||||
'1010310003': {
|
||||
@@ -111,6 +116,8 @@ _SKUS = {
|
||||
'product': 'Google-Apps', 'aliases': ['standard', 'free'], 'displayName': 'G Suite Legacy'},
|
||||
'Google-Apps-For-Business': {
|
||||
'product': 'Google-Apps', 'aliases': ['gafb', 'gafw', 'basic', 'gsuitebasic'], 'displayName': 'G Suite Basic'},
|
||||
'Google-Apps-For-Education': {
|
||||
'product': 'Google-Apps', 'aliases': ['gafe', 'gsuiteeducation', 'gsuiteedu'], 'displayName': 'Google Workspace for Education - Fundamentals'},
|
||||
'Google-Apps-For-Government': {
|
||||
'product': 'Google-Apps', 'aliases': ['gafg', 'gsuitegovernment', 'gsuitegov'], 'displayName': 'Google Workspace Government'},
|
||||
'Google-Apps-For-Postini': {
|
||||
@@ -148,6 +155,8 @@ _SKUS = {
|
||||
'product': '101034', 'aliases': ['wsbizstarterarchived', 'workspacebusinessstarterarchived'], 'displayName': 'Google Workspace Business Starter - Archived User'},
|
||||
'1010340006': {
|
||||
'product': '101034', 'aliases': ['wsbizstanarchived', 'workspacebusinessstanarchived'], 'displayName': 'Google Workspace Business Standard - Archived User'},
|
||||
'1010340007': {
|
||||
'product': '101034', 'aliases': ['gwefau', 'gwefarchived', 'workspaceeducationfundamentalsarchived'], 'displayName': 'Google Workspace for Education Fundamentals - Archived User'},
|
||||
'1010060001': {
|
||||
'product': '101006', 'aliases': ['gsuiteessentials', 'essentials',
|
||||
'd4e', 'driveenterprise', 'drive4enterprise',
|
||||
|
||||
@@ -12,4 +12,4 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
__version__ = "2.156.0"
|
||||
__version__ = "2.164.0"
|
||||
|
||||
Reference in New Issue
Block a user