mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 04:41:35 +00:00
Alert Center Pub/Sub notifications
This commit is contained in:
@@ -539,6 +539,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
||||||
<PropertyKey> ::= <String>
|
<PropertyKey> ::= <String>
|
||||||
<PropertyValue> ::= <String>
|
<PropertyValue> ::= <String>
|
||||||
|
<PubSubTopicName> ::= <String>
|
||||||
<QueryAlert> ::= <String>
|
<QueryAlert> ::= <String>
|
||||||
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||||
<QueryBrowser> ::= <String>
|
<QueryBrowser> ::= <String>
|
||||||
@@ -1540,6 +1541,10 @@ gam show admins
|
|||||||
|
|
||||||
# Alert Center
|
# Alert Center
|
||||||
|
|
||||||
|
gam show alertsettings
|
||||||
|
gam update alertsettings <PubsubTopicName>
|
||||||
|
gam clear alertsettings
|
||||||
|
|
||||||
gam delete alert <AlertID>
|
gam delete alert <AlertID>
|
||||||
gam undelete alert <AlertID>
|
gam undelete alert <AlertID>
|
||||||
gam info alert <AlertID> [formatjson]
|
gam info alert <AlertID> [formatjson]
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
7.18.04
|
||||||
|
|
||||||
|
Added commands to display/manage Alert Center Pub/Sub notifications.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Alert-Center#configuring-settings
|
||||||
|
|
||||||
7.18.03
|
7.18.03
|
||||||
|
|
||||||
Updated `gam oauth create` to give a warning if the number of selected scopes will
|
Updated `gam oauth create` to give a warning if the number of selected scopes will
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.18.03'
|
__version__ = '7.18.04'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -27081,6 +27081,8 @@ def _getChatMemberEmail(cd, member):
|
|||||||
if member['member']['type'] == 'HUMAN':
|
if member['member']['type'] == 'HUMAN':
|
||||||
_, memberUid = member['member']['name'].split('/')
|
_, memberUid = member['member']['name'].split('/')
|
||||||
member['member']['email'], _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['user'])
|
member['member']['email'], _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['user'])
|
||||||
|
if member['member']['email'].find('@') == -1:
|
||||||
|
member['member']['email'] = 'id:'+member['member']['email']
|
||||||
elif 'groupMember' in member:
|
elif 'groupMember' in member:
|
||||||
_, memberUid = member['groupMember']['name'].split('/')
|
_, memberUid = member['groupMember']['name'].split('/')
|
||||||
member['groupMember']['email'], _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['group'])
|
member['groupMember']['email'], _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['group'])
|
||||||
@@ -37798,6 +37800,54 @@ def doDeleteOrUndeleteAlert():
|
|||||||
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.permissionDenied):
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.permissionDenied):
|
||||||
userAlertsServiceNotEnabledWarning(user)
|
userAlertsServiceNotEnabledWarning(user)
|
||||||
|
|
||||||
|
def _showAlertSettings(settings):
|
||||||
|
notifications = settings.get('notifications', [])
|
||||||
|
count = len(notifications)
|
||||||
|
entityPerformAction([Ent.ALERT_SETTINGS, None])
|
||||||
|
i = 0
|
||||||
|
for notification in notifications:
|
||||||
|
i += 1
|
||||||
|
printEntity([Ent.NOTIFICATION, None], i, count)
|
||||||
|
Ind.Increment()
|
||||||
|
showJSON(None, notification)
|
||||||
|
Ind.Decrement()
|
||||||
|
|
||||||
|
# gam show alertsettings
|
||||||
|
def doShowAlertSettings():
|
||||||
|
checkForExtraneousArguments()
|
||||||
|
user, ac = buildGAPIServiceObject(API.ALERTCENTER, _getAdminEmail())
|
||||||
|
if not ac:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
settings = callGAPI(ac.v1beta1(), 'getSettings',
|
||||||
|
throwReasons=GAPI.ALERT_THROW_REASONS)
|
||||||
|
_showAlertSettings(settings)
|
||||||
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.permissionDenied):
|
||||||
|
userAlertsServiceNotEnabledWarning(user)
|
||||||
|
|
||||||
|
# gam update alertsettings <PubsubTopicName>
|
||||||
|
def doUpdateAlertSettings(clear=False):
|
||||||
|
if not clear:
|
||||||
|
body = {'notifications':
|
||||||
|
[{'cloudPubsubTopic': {'topicName': getString(Cmd.OB_PUBSUB_TOPIC_NAME)}}]}
|
||||||
|
else:
|
||||||
|
body = {'notifications': []}
|
||||||
|
checkForExtraneousArguments()
|
||||||
|
user, ac = buildGAPIServiceObject(API.ALERTCENTER, _getAdminEmail())
|
||||||
|
if not ac:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
settings = callGAPI(ac.v1beta1(), 'updateSettings',
|
||||||
|
throwReasons=GAPI.ALERT_THROW_REASONS,
|
||||||
|
body=body)
|
||||||
|
_showAlertSettings(settings)
|
||||||
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.permissionDenied):
|
||||||
|
userAlertsServiceNotEnabledWarning(user)
|
||||||
|
|
||||||
|
# gam clear alertsettings
|
||||||
|
def doClearAlertSettings():
|
||||||
|
doUpdateAlertSettings(clear=True)
|
||||||
|
|
||||||
ALERT_TIME_OBJECTS = {'createTime', 'startTime', 'endTime'}
|
ALERT_TIME_OBJECTS = {'createTime', 'startTime', 'endTime'}
|
||||||
|
|
||||||
def _showAlert(alert, FJQC, i=0, count=0):
|
def _showAlert(alert, FJQC, i=0, count=0):
|
||||||
@@ -77185,7 +77235,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|||||||
),
|
),
|
||||||
'clear':
|
'clear':
|
||||||
(Act.CLEAR,
|
(Act.CLEAR,
|
||||||
{Cmd.ARG_CONTACT: doClearDomainContacts,
|
{Cmd.ARG_ALERTSETTINGS: doClearAlertSettings,
|
||||||
|
Cmd.ARG_CONTACT: doClearDomainContacts,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
'close':
|
'close':
|
||||||
@@ -77506,6 +77557,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|||||||
Cmd.ARG_ADMIN: doPrintShowAdmins,
|
Cmd.ARG_ADMIN: doPrintShowAdmins,
|
||||||
Cmd.ARG_ALERT: doPrintShowAlerts,
|
Cmd.ARG_ALERT: doPrintShowAlerts,
|
||||||
Cmd.ARG_ALERTFEEDBACK: doPrintShowAlertFeedback,
|
Cmd.ARG_ALERTFEEDBACK: doPrintShowAlertFeedback,
|
||||||
|
Cmd.ARG_ALERTSETTINGS: doShowAlertSettings,
|
||||||
Cmd.ARG_BROWSER: doPrintShowBrowsers,
|
Cmd.ARG_BROWSER: doPrintShowBrowsers,
|
||||||
Cmd.ARG_BROWSERTOKEN: doPrintShowBrowserTokens,
|
Cmd.ARG_BROWSERTOKEN: doPrintShowBrowserTokens,
|
||||||
Cmd.ARG_BUILDING: doPrintShowBuildings,
|
Cmd.ARG_BUILDING: doPrintShowBuildings,
|
||||||
@@ -77598,6 +77650,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|||||||
'update':
|
'update':
|
||||||
(Act.UPDATE,
|
(Act.UPDATE,
|
||||||
{Cmd.ARG_ADMINROLE: doCreateUpdateAdminRoles,
|
{Cmd.ARG_ADMINROLE: doCreateUpdateAdminRoles,
|
||||||
|
Cmd.ARG_ALERTSETTINGS: doUpdateAlertSettings,
|
||||||
Cmd.ARG_ALIAS: doCreateUpdateAliases,
|
Cmd.ARG_ALIAS: doCreateUpdateAliases,
|
||||||
Cmd.ARG_BROWSER: doUpdateBrowsers,
|
Cmd.ARG_BROWSER: doUpdateBrowsers,
|
||||||
Cmd.ARG_BUILDING: doUpdateBuilding,
|
Cmd.ARG_BUILDING: doUpdateBuilding,
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ class GamCLArgs():
|
|||||||
ARG_ALERTFEEDBACK = 'alertfeedback'
|
ARG_ALERTFEEDBACK = 'alertfeedback'
|
||||||
ARG_ALERTFEEDBACKS = 'alertfeedbacks'
|
ARG_ALERTFEEDBACKS = 'alertfeedbacks'
|
||||||
ARG_ALERTSFEEDBACK = 'alertsfeedback'
|
ARG_ALERTSFEEDBACK = 'alertsfeedback'
|
||||||
|
ARG_ALERTSETTINGS = 'alertsettings'
|
||||||
ARG_ALIAS = 'alias'
|
ARG_ALIAS = 'alias'
|
||||||
ARG_ALIASES = 'aliases'
|
ARG_ALIASES = 'aliases'
|
||||||
ARG_ALIASDOMAIN = 'aliasdomain'
|
ARG_ALIASDOMAIN = 'aliasdomain'
|
||||||
@@ -1013,6 +1014,7 @@ class GamCLArgs():
|
|||||||
OB_PROJECT_ID_ENTITY = 'ProjectIDEntity'
|
OB_PROJECT_ID_ENTITY = 'ProjectIDEntity'
|
||||||
OB_PROPERTY_KEY = 'PropertyKey'
|
OB_PROPERTY_KEY = 'PropertyKey'
|
||||||
OB_PROPERTY_VALUE = 'PropertyValue'
|
OB_PROPERTY_VALUE = 'PropertyValue'
|
||||||
|
OB_PUBSUB_TOPIC_NAME = 'PubSubTopicName'
|
||||||
OB_QUERY = 'Query'
|
OB_QUERY = 'Query'
|
||||||
OB_QUERY_ITEM = 'QueryItem'
|
OB_QUERY_ITEM = 'QueryItem'
|
||||||
OB_QUERY_LIST = 'QueryList'
|
OB_QUERY_LIST = 'QueryList'
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class GamEntity():
|
|||||||
ALERT_ID = 'alri'
|
ALERT_ID = 'alri'
|
||||||
ALERT_FEEDBACK = 'alfb'
|
ALERT_FEEDBACK = 'alfb'
|
||||||
ALERT_FEEDBACK_ID = 'alfi'
|
ALERT_FEEDBACK_ID = 'alfi'
|
||||||
|
ALERT_SETTINGS = 'alrs'
|
||||||
ALIAS = 'alia'
|
ALIAS = 'alia'
|
||||||
ALIAS_EMAIL = 'alie'
|
ALIAS_EMAIL = 'alie'
|
||||||
ALIAS_TARGET = 'alit'
|
ALIAS_TARGET = 'alit'
|
||||||
@@ -285,10 +286,11 @@ class GamEntity():
|
|||||||
MIMETYPE = 'mime'
|
MIMETYPE = 'mime'
|
||||||
MOBILE_DEVICE = 'mobi'
|
MOBILE_DEVICE = 'mobi'
|
||||||
NAME = 'name'
|
NAME = 'name'
|
||||||
|
NONEDITABLE_ALIAS = 'neal'
|
||||||
NOTE = 'note'
|
NOTE = 'note'
|
||||||
NOTE_ACL = 'nota'
|
NOTE_ACL = 'nota'
|
||||||
NOTES_ACLS = 'naac'
|
NOTES_ACLS = 'naac'
|
||||||
NONEDITABLE_ALIAS = 'neal'
|
NOTIFICATION = 'noti'
|
||||||
OAUTH2_TXT_FILE = 'oaut'
|
OAUTH2_TXT_FILE = 'oaut'
|
||||||
OAUTH2SERVICE_JSON_FILE = 'oau2'
|
OAUTH2SERVICE_JSON_FILE = 'oau2'
|
||||||
ORGANIZATIONAL_UNIT = 'orgu'
|
ORGANIZATIONAL_UNIT = 'orgu'
|
||||||
@@ -414,6 +416,7 @@ class GamEntity():
|
|||||||
ALERT_ID: ['Alert IDs', 'Alert ID'],
|
ALERT_ID: ['Alert IDs', 'Alert ID'],
|
||||||
ALERT_FEEDBACK: ['Alert Feedbacks', 'Alert Feedback'],
|
ALERT_FEEDBACK: ['Alert Feedbacks', 'Alert Feedback'],
|
||||||
ALERT_FEEDBACK_ID: ['Alert Feedback IDs', 'Alert Feedback ID'],
|
ALERT_FEEDBACK_ID: ['Alert Feedback IDs', 'Alert Feedback ID'],
|
||||||
|
ALERT_SETTINGS: ['Alert Settings', 'Alert Settings'],
|
||||||
ALIAS: ['Aliases', 'Alias'],
|
ALIAS: ['Aliases', 'Alias'],
|
||||||
ALIAS_EMAIL: ['Alias Emails', 'Alias Email'],
|
ALIAS_EMAIL: ['Alias Emails', 'Alias Email'],
|
||||||
ALIAS_TARGET: ['Alias Targets', 'Alias Target'],
|
ALIAS_TARGET: ['Alias Targets', 'Alias Target'],
|
||||||
@@ -645,10 +648,11 @@ class GamEntity():
|
|||||||
MIMETYPE: ['MIME Types', 'MIME Type'],
|
MIMETYPE: ['MIME Types', 'MIME Type'],
|
||||||
MOBILE_DEVICE: ['Mobile Devices', 'Mobile Device'],
|
MOBILE_DEVICE: ['Mobile Devices', 'Mobile Device'],
|
||||||
NAME: ['Names', 'Name'],
|
NAME: ['Names', 'Name'],
|
||||||
|
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
||||||
NOTE: ['Notes', 'Note'],
|
NOTE: ['Notes', 'Note'],
|
||||||
NOTE_ACL: ['Note ACLs', 'Note ACL'],
|
NOTE_ACL: ['Note ACLs', 'Note ACL'],
|
||||||
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
|
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
|
||||||
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
NOTIFICATION: ['Notifications', 'Notification'],
|
||||||
OAUTH2_TXT_FILE: ['Client OAuth2 File', 'Client OAuth2 File'],
|
OAUTH2_TXT_FILE: ['Client OAuth2 File', 'Client OAuth2 File'],
|
||||||
OAUTH2SERVICE_JSON_FILE: ['Service Account OAuth2 File', 'Service Account OAuth2 File'],
|
OAUTH2SERVICE_JSON_FILE: ['Service Account OAuth2 File', 'Service Account OAuth2 File'],
|
||||||
ORGANIZATIONAL_UNIT: ['Organizational Units', 'Organizational Unit'],
|
ORGANIZATIONAL_UNIT: ['Organizational Units', 'Organizational Unit'],
|
||||||
|
|||||||
Reference in New Issue
Block a user