mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-16 20:21:37 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51a4d92a90 | ||
|
|
d527f4104f | ||
|
|
2d74916ca5 |
51
src/gam.py
51
src/gam.py
@@ -25,7 +25,7 @@ For more information, see http://git.io/gam
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = u'Jay Lee <jay0lee@gmail.com>'
|
__author__ = u'Jay Lee <jay0lee@gmail.com>'
|
||||||
__version__ = u'3.62'
|
__version__ = u'3.63'
|
||||||
__license__ = u'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = u'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
import sys, os, time, datetime, random, socket, csv, platform, re, calendar, base64, string, StringIO, subprocess
|
import sys, os, time, datetime, random, socket, csv, platform, re, calendar, base64, string, StringIO, subprocess
|
||||||
@@ -61,7 +61,7 @@ true_values = [u'on', u'yes', u'enabled', u'true', u'1']
|
|||||||
false_values = [u'off', u'no', u'disabled', u'false', u'0']
|
false_values = [u'off', u'no', u'disabled', u'false', u'0']
|
||||||
usergroup_types = [u'user', u'users', u'group', u'ou', u'org',
|
usergroup_types = [u'user', u'users', u'group', u'ou', u'org',
|
||||||
u'ou_and_children', u'ou_and_child', u'query',
|
u'ou_and_children', u'ou_and_child', u'query',
|
||||||
u'license', u'licenses', u'licence', u'licences', u'file', u'all',
|
u'license', u'licenses', u'licence', u'licences', u'file', u'csv', u'all',
|
||||||
u'cros']
|
u'cros']
|
||||||
ERROR = u'ERROR'
|
ERROR = u'ERROR'
|
||||||
ERROR_PREFIX = ERROR+u': '
|
ERROR_PREFIX = ERROR+u': '
|
||||||
@@ -5954,7 +5954,7 @@ def doUpdateGroup():
|
|||||||
for user_email in users_email:
|
for user_email in users_email:
|
||||||
if user_email != u'*' and user_email.find(u'@') == -1:
|
if user_email != u'*' and user_email.find(u'@') == -1:
|
||||||
user_email = u'%s@%s' % (user_email, GC_Values[GC_DOMAIN])
|
user_email = u'%s@%s' % (user_email, GC_Values[GC_DOMAIN])
|
||||||
sys.stderr.write(u' %sing %s %s...' % (sys.argv[4].lower(), role.lower(), user_email))
|
sys.stderr.write(u' %sing %s %s...\n' % (sys.argv[4].lower(), role.lower(), user_email))
|
||||||
try:
|
try:
|
||||||
if sys.argv[4].lower() == u'add':
|
if sys.argv[4].lower() == u'add':
|
||||||
body = {u'role': role}
|
body = {u'role': role}
|
||||||
@@ -5962,13 +5962,6 @@ def doUpdateGroup():
|
|||||||
result = callGAPI(service=cd.members(), function=u'insert', soft_errors=True, groupKey=group, body=body)
|
result = callGAPI(service=cd.members(), function=u'insert', soft_errors=True, groupKey=group, body=body)
|
||||||
elif sys.argv[4].lower() == u'update':
|
elif sys.argv[4].lower() == u'update':
|
||||||
result = callGAPI(service=cd.members(), function=u'update', soft_errors=True, groupKey=group, memberKey=user_email, body={u'email': user_email, u'role': role})
|
result = callGAPI(service=cd.members(), function=u'update', soft_errors=True, groupKey=group, memberKey=user_email, body={u'email': user_email, u'role': role})
|
||||||
try:
|
|
||||||
if str(result[u'email']).lower() != user_email.lower():
|
|
||||||
print u'added %s (primary address) to group' % result[u'email']
|
|
||||||
else:
|
|
||||||
print u'added %s to group' % result[u'email']
|
|
||||||
except TypeError:
|
|
||||||
pass
|
|
||||||
except googleapiclient.errors.HttpError:
|
except googleapiclient.errors.HttpError:
|
||||||
pass
|
pass
|
||||||
elif sys.argv[4].lower() == u'sync':
|
elif sys.argv[4].lower() == u'sync':
|
||||||
@@ -5983,15 +5976,13 @@ def doUpdateGroup():
|
|||||||
current_emails = [x.lower() for x in current_emails]
|
current_emails = [x.lower() for x in current_emails]
|
||||||
to_add = list(set(users_email) - set(current_emails))
|
to_add = list(set(users_email) - set(current_emails))
|
||||||
to_remove = list(set(current_emails) - set(users_email))
|
to_remove = list(set(current_emails) - set(users_email))
|
||||||
|
sys.stderr.write(u'Need to add %s %s and remove %s.\n' % (len(to_add), role, len(to_remove)))
|
||||||
|
items = []
|
||||||
for user_email in to_add:
|
for user_email in to_add:
|
||||||
sys.stderr.write(u' adding %s %s\n' % (role, user_email))
|
items.append([u'update', u'group', group, u'add', role, user_email])
|
||||||
try:
|
|
||||||
result = callGAPI(service=cd.members(), function=u'insert', soft_errors=True, throw_reasons=[u'duplicate'], groupKey=group, body={u'email': user_email, u'role': role})
|
|
||||||
except googleapiclient.errors.HttpError:
|
|
||||||
result = callGAPI(service=cd.members(), function=u'update', soft_errors=True, groupKey=group, memberKey=user_email, body={u'email': user_email, u'role': role})
|
|
||||||
for user_email in to_remove:
|
for user_email in to_remove:
|
||||||
sys.stderr.write(u' removing %s\n' % user_email)
|
items.append([u'update', u'group', group, u'remove', user_email])
|
||||||
result = callGAPI(service=cd.members(), function=u'delete', soft_errors=True, groupKey=group, memberKey=user_email)
|
run_batch(items)
|
||||||
elif sys.argv[4].lower() == u'remove':
|
elif sys.argv[4].lower() == u'remove':
|
||||||
i = 5
|
i = 5
|
||||||
if sys.argv[i].lower() in [u'member', u'manager', u'owner']:
|
if sys.argv[i].lower() in [u'member', u'manager', u'owner']:
|
||||||
@@ -7598,6 +7589,7 @@ def doPrintGroups():
|
|||||||
group_attributes = [{u'Email': u'Email'}]
|
group_attributes = [{u'Email': u'Email'}]
|
||||||
titles = [u'Email']
|
titles = [u'Email']
|
||||||
fields = u'nextPageToken,groups(email)'
|
fields = u'nextPageToken,groups(email)'
|
||||||
|
maxResults = None
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
if sys.argv[i].lower() == u'domain':
|
if sys.argv[i].lower() == u'domain':
|
||||||
usedomain = sys.argv[i+1].lower()
|
usedomain = sys.argv[i+1].lower()
|
||||||
@@ -7606,6 +7598,9 @@ def doPrintGroups():
|
|||||||
elif sys.argv[i].lower() == u'todrive':
|
elif sys.argv[i].lower() == u'todrive':
|
||||||
todrive = True
|
todrive = True
|
||||||
i += 1
|
i += 1
|
||||||
|
elif sys.argv[i].lower() == u'maxresults':
|
||||||
|
maxResults = int(sys.argv[i+1])
|
||||||
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'delimiter':
|
elif sys.argv[i].lower() == u'delimiter':
|
||||||
listDelimiter = sys.argv[i+1]
|
listDelimiter = sys.argv[i+1]
|
||||||
i += 2
|
i += 2
|
||||||
@@ -7668,7 +7663,7 @@ def doPrintGroups():
|
|||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
sys.stderr.write(u"Retrieving All Groups for Google Apps account (may take some time on a large account)...\n")
|
sys.stderr.write(u"Retrieving All Groups for Google Apps account (may take some time on a large account)...\n")
|
||||||
page_message = u'Got %%num_items%% groups: %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%num_items%% groups: %%first_item%% - %%last_item%%\n'
|
||||||
all_groups = callGAPIpages(service=cd.groups(), function=u'list', items=u'groups', page_message=page_message,
|
all_groups = callGAPIpages(service=cd.groups(), function=u'list', items=u'groups', page_message=page_message, maxResults=maxResults,
|
||||||
message_attribute=u'email', customer=customer, domain=usedomain, userKey=usemember, fields=fields)
|
message_attribute=u'email', customer=customer, domain=usedomain, userKey=usemember, fields=fields)
|
||||||
total_groups = len(all_groups)
|
total_groups = len(all_groups)
|
||||||
count = 0
|
count = 0
|
||||||
@@ -8591,7 +8586,7 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, return_uids=Fa
|
|||||||
group = u'%s@%s' % (group, GC_Values[GC_DOMAIN])
|
group = u'%s@%s' % (group, GC_Values[GC_DOMAIN])
|
||||||
page_message = None
|
page_message = None
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"Getting %s of %s (may take some time for large groups)..." % (member_type_message, group))
|
sys.stderr.write(u"Getting %s of %s (may take some time for large groups)...\n" % (member_type_message, group))
|
||||||
page_message = u'Got %%%%total_items%%%% %s...' % member_type_message
|
page_message = u'Got %%%%total_items%%%% %s...' % member_type_message
|
||||||
members = callGAPIpages(service=cd.members(), function=u'list', items=u'members', page_message=page_message,
|
members = callGAPIpages(service=cd.members(), function=u'list', items=u'members', page_message=page_message,
|
||||||
groupKey=group, roles=member_type, fields=u'nextPageToken,members(email,id)')
|
groupKey=group, roles=member_type, fields=u'nextPageToken,members(email,id)')
|
||||||
@@ -8670,12 +8665,18 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, return_uids=Fa
|
|||||||
elif entity_type == u'file':
|
elif entity_type == u'file':
|
||||||
users = []
|
users = []
|
||||||
filename = entity
|
filename = entity
|
||||||
usernames = csv.reader(open(filename, u'rb'))
|
users = readFile(filename, u'rb').splitlines()
|
||||||
for row in usernames:
|
elif entity_type == u'csv':
|
||||||
try:
|
(filename, column) = entity.split(u':')
|
||||||
users.append(row.pop())
|
file_contents = readFile(filename)
|
||||||
except IndexError:
|
f = StringIO.StringIO(file_contents)
|
||||||
pass
|
input_file = csv.DictReader(f)
|
||||||
|
users = []
|
||||||
|
for row in input_file:
|
||||||
|
if column not in row:
|
||||||
|
print u'ERROR: %s does not seem to be a header in CSV file %s' % (column, filename)
|
||||||
|
sys.exit(3)
|
||||||
|
users.append(row[column])
|
||||||
elif entity_type in [u'courseparticipants', u'teachers', u'students']:
|
elif entity_type in [u'courseparticipants', u'teachers', u'students']:
|
||||||
croom = buildGAPIObject(u'classroom')
|
croom = buildGAPIObject(u'classroom')
|
||||||
users = []
|
users = []
|
||||||
|
|||||||
Reference in New Issue
Block a user