mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-08 13:43:35 +00:00
Merge branch 'master' of github.com:jay0lee/GAM
yes
This commit is contained in:
204
gam.py
204
gam.py
@ -3270,6 +3270,88 @@ def getVacation(users):
|
|||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def doDelSchema():
|
||||||
|
cd = buildGAPIObject(u'directory')
|
||||||
|
schemaKey = sys.argv[3]
|
||||||
|
callGAPI(service=cd.customer().schemas(), function=u'delete', customerId=customerId, schemaKey=schemaKey)
|
||||||
|
print u'Deleted schema %s' % schemaKey
|
||||||
|
|
||||||
|
def doCreateOrUpdateUserSchema():
|
||||||
|
cd = buildGAPIObject(u'directory')
|
||||||
|
schemaName = sys.argv[3]
|
||||||
|
body = {u'schemaName': schemaName, u'fields': []}
|
||||||
|
i = 4
|
||||||
|
while i < len(sys.argv):
|
||||||
|
if sys.argv[i] in [u'field']:
|
||||||
|
a_field = {u'fieldName': sys.argv[i+1]}
|
||||||
|
i += 2
|
||||||
|
while True:
|
||||||
|
if sys.argv[i].lower() in [u'type']:
|
||||||
|
a_field[u'fieldType'] = sys.argv[i+1].upper()
|
||||||
|
if a_field[u'fieldType'] not in [u'BOOL', u'DOUBLE', u'EMAIL', u'INT64', u'PHONE', u'STRING']:
|
||||||
|
print 'Error: type must be bool, double, email, int64, phone or string. Got %s' % a_field[u'fieldType']
|
||||||
|
sys.exit(3)
|
||||||
|
i += 2
|
||||||
|
elif sys.argv[i].lower() in [u'multivalued']:
|
||||||
|
a_field[u'multiValued'] = True
|
||||||
|
i += 1
|
||||||
|
elif sys.argv[i].lower() in [u'indexed']:
|
||||||
|
a_field[u'indexed'] = True
|
||||||
|
i += 1
|
||||||
|
elif sys.argv[i].lower() in [u'restricted']:
|
||||||
|
a_field[u'readAccessType'] = u'ADMINS_AND_SELF'
|
||||||
|
i += 1
|
||||||
|
elif sys.argv[i].lower() in [u'range']:
|
||||||
|
a_field[u'numericIndexingSpec'] = {u'minValue': sys.argv[i+1], u'maxValue': sys.argv[i+2]}
|
||||||
|
i += 3
|
||||||
|
elif sys.argv[i].lower() in [u'endfield']:
|
||||||
|
body[u'fields'].append(a_field)
|
||||||
|
i += 1
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print 'Error: %s is not a valid argument to gam create schema' % sys.argv[i]
|
||||||
|
sys.exit(4)
|
||||||
|
if sys.argv[1].lower() == u'create':
|
||||||
|
result = callGAPI(service=cd.customer().schemas(), function=u'insert', customerId=customerId, body=body)
|
||||||
|
print 'Created user schema %s' % result[u'schemaName']
|
||||||
|
elif sys.argv[1].lower() == u'update':
|
||||||
|
result = callGAPI(service=cd.customer().schemas(), function=u'update', customerId=customerId, body=body, schemaKey=schemaName)
|
||||||
|
print 'Updated user schema %s' % result[u'schemaName']
|
||||||
|
|
||||||
|
def doPrintUserSchemas():
|
||||||
|
cd = buildGAPIObject(u'directory')
|
||||||
|
schemas = callGAPI(service=cd.customer().schemas(), function=u'list', customerId=customerId)
|
||||||
|
for schema in schemas[u'schemas']:
|
||||||
|
print u'Schema: %s' % schema[u'schemaName']
|
||||||
|
for a_key in schema.keys():
|
||||||
|
if a_key not in [u'schemaName', u'fields', u'etag', u'kind']:
|
||||||
|
print '%s: %s' % (a_key, schema[a_key])
|
||||||
|
print
|
||||||
|
for field in schema[u'fields']:
|
||||||
|
print u' Field: %s' % field[u'fieldName']
|
||||||
|
for a_key in field.keys():
|
||||||
|
if a_key not in [u'fieldName', u'kind', u'etag']:
|
||||||
|
print ' %s: %s' % (a_key, field[a_key])
|
||||||
|
print
|
||||||
|
print
|
||||||
|
|
||||||
|
def doGetUserSchema():
|
||||||
|
cd = buildGAPIObject(u'directory')
|
||||||
|
schemaKey = sys.argv[3]
|
||||||
|
schema = callGAPI(service=cd.customer().schemas(), function=u'get', customerId=customerId, schemaKey=schemaKey)
|
||||||
|
print u'Schema: %s' % schema[u'schemaName']
|
||||||
|
for a_key in schema.keys():
|
||||||
|
if a_key not in [u'schemaName', u'fields', u'etag', u'kind']:
|
||||||
|
print '%s: %s' % (a_key, schema[a_key])
|
||||||
|
print
|
||||||
|
for field in schema[u'fields']:
|
||||||
|
print u' Field: %s' % field[u'fieldName']
|
||||||
|
for a_key in field.keys():
|
||||||
|
if a_key not in [u'fieldName', u'kind', u'etag']:
|
||||||
|
print ' %s: %s' % (a_key, field[a_key])
|
||||||
|
print
|
||||||
|
|
||||||
def doCreateUser():
|
def doCreateUser():
|
||||||
cd = buildGAPIObject(u'directory')
|
cd = buildGAPIObject(u'directory')
|
||||||
body = dict()
|
body = dict()
|
||||||
@ -3567,9 +3649,33 @@ def doCreateUser():
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
body[u'externalIds'] = [externalid,]
|
body[u'externalIds'] = [externalid,]
|
||||||
i += 1
|
i += 1
|
||||||
|
# else:
|
||||||
|
# showUsage()
|
||||||
|
# sys.exit(2)
|
||||||
else:
|
else:
|
||||||
showUsage()
|
if u'customSchemas' not in body:
|
||||||
sys.exit(2)
|
body[u'customSchemas'] = {}
|
||||||
|
try:
|
||||||
|
(schemaName, fieldName) = sys.argv[i].split(u'.')
|
||||||
|
except ValueError:
|
||||||
|
print 'Error: %s is not a valid create user argument or custom schema name.' % sys.argv[i]
|
||||||
|
sys.exit(3)
|
||||||
|
field_value = sys.argv[i+1]
|
||||||
|
is_multivalue = False
|
||||||
|
if field_value.lower() in [u'multivalue', u'multivalued', u'value']:
|
||||||
|
is_multivalue = True
|
||||||
|
field_value = sys.argv[i+2]
|
||||||
|
if schemaName not in body[u'customSchemas']:
|
||||||
|
body[u'customSchemas'][schemaName] = {}
|
||||||
|
if is_multivalue:
|
||||||
|
if fieldName not in body[u'customSchemas'][schemaName]:
|
||||||
|
body[u'customSchemas'][schemaName][fieldName] = []
|
||||||
|
body[u'customSchemas'][schemaName][fieldName].append({u'value': field_value})
|
||||||
|
else:
|
||||||
|
body[u'customSchemas'][schemaName][fieldName] = field_value
|
||||||
|
i += 2
|
||||||
|
if is_multivalue:
|
||||||
|
i += 1
|
||||||
if not gotFirstName:
|
if not gotFirstName:
|
||||||
body[u'name'][u'givenName'] = u'Unknown'
|
body[u'name'][u'givenName'] = u'Unknown'
|
||||||
if not gotLastName:
|
if not gotLastName:
|
||||||
@ -4039,11 +4145,36 @@ def doUpdateUser(users):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
body[u'externalIds'] = [externalid,]
|
body[u'externalIds'] = [externalid,]
|
||||||
i += 1
|
i += 1
|
||||||
|
# else:
|
||||||
|
# showUsage()
|
||||||
|
# print u''
|
||||||
|
# print u'Error: didn\'t expect %s command at position %s' % (sys.argv[i], i)
|
||||||
|
# sys.exit(2)
|
||||||
else:
|
else:
|
||||||
showUsage()
|
do_update_user = True
|
||||||
print u''
|
if u'customSchemas' not in body:
|
||||||
print u'Error: didn\'t expect %s command at position %s' % (sys.argv[i], i)
|
body[u'customSchemas'] = {}
|
||||||
sys.exit(2)
|
try:
|
||||||
|
(schemaName, fieldName) = sys.argv[i].split(u'.')
|
||||||
|
except ValueError:
|
||||||
|
print u'Error: %s is not a valid user update argument or custom schema name' % sys.argv[i]
|
||||||
|
sys.exit(3)
|
||||||
|
field_value = sys.argv[i+1]
|
||||||
|
is_multivalue = False
|
||||||
|
if field_value.lower() == u'multivalue':
|
||||||
|
is_multivalue = True
|
||||||
|
field_value = sys.argv[i+2]
|
||||||
|
if schemaName not in body[u'customSchemas']:
|
||||||
|
body[u'customSchemas'][schemaName] = {}
|
||||||
|
if is_multivalue:
|
||||||
|
if fieldName not in body[u'customSchemas'][schemaName]:
|
||||||
|
body[u'customSchemas'][schemaName][fieldName] = []
|
||||||
|
body[u'customSchemas'][schemaName][fieldName].append({u'value': field_value})
|
||||||
|
else:
|
||||||
|
body[u'customSchemas'][schemaName][fieldName] = field_value
|
||||||
|
i += 2
|
||||||
|
if is_multivalue:
|
||||||
|
i += 1
|
||||||
if gotPassword and not (isSHA1 or isMD5 or isCrypt or nohash):
|
if gotPassword and not (isSHA1 or isMD5 or isCrypt or nohash):
|
||||||
body[u'password'] = gen_sha512_hash(body[u'password'])
|
body[u'password'] = gen_sha512_hash(body[u'password'])
|
||||||
body[u'hashFunction'] = u'crypt'
|
body[u'hashFunction'] = u'crypt'
|
||||||
@ -4472,7 +4603,9 @@ def doGetUserInfo(user_email=None):
|
|||||||
user_email = user_email[4:]
|
user_email = user_email[4:]
|
||||||
elif user_email.find(u'@') == -1:
|
elif user_email.find(u'@') == -1:
|
||||||
user_email = u'%s@%s' % (user_email, domain)
|
user_email = u'%s@%s' % (user_email, domain)
|
||||||
getAliases = getGroups = getLicenses = True
|
getSchemas = getAliases = getGroups = getLicenses = True
|
||||||
|
projection = u'full'
|
||||||
|
customFieldMask = viewType = None
|
||||||
i = 4
|
i = 4
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
if sys.argv[i].lower() == u'noaliases':
|
if sys.argv[i].lower() == u'noaliases':
|
||||||
@ -4484,10 +4617,23 @@ def doGetUserInfo(user_email=None):
|
|||||||
elif sys.argv[i].lower() == u'nolicenses':
|
elif sys.argv[i].lower() == u'nolicenses':
|
||||||
getLicenses = False
|
getLicenses = False
|
||||||
i += 1
|
i += 1
|
||||||
|
elif sys.argv[i].lower() == u'noschemas':
|
||||||
|
getSchemas = False
|
||||||
|
projection = u'basic'
|
||||||
|
i += 1
|
||||||
|
elif sys.argv[i].lower() == u'schemas':
|
||||||
|
getSchemas = True
|
||||||
|
projection = u'custom'
|
||||||
|
customFieldMask = sys.argv[i+1]
|
||||||
|
i += 2
|
||||||
|
elif sys.argv[i].lower() == u'userview':
|
||||||
|
viewType = u'domain_public'
|
||||||
|
getGroups = getLicenses = False
|
||||||
|
i += 1
|
||||||
else:
|
else:
|
||||||
print u'%s is not a valid argument for gam info user' % sys.argv[i]
|
print u'%s is not a valid argument for gam info user' % sys.argv[i]
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
user = callGAPI(service=cd.users(), function=u'get', userKey=user_email)
|
user = callGAPI(service=cd.users(), function=u'get', userKey=user_email, projection=projection, customFieldMask=customFieldMask, viewType=viewType)
|
||||||
print u'User: %s' % user[u'primaryEmail']
|
print u'User: %s' % user[u'primaryEmail']
|
||||||
if u'name' in user and u'givenName' in user[u'name']:
|
if u'name' in user and u'givenName' in user[u'name']:
|
||||||
print u'First Name: %s' % user[u'name'][u'givenName']
|
print u'First Name: %s' % user[u'name'][u'givenName']
|
||||||
@ -4586,6 +4732,19 @@ def doGetUserInfo(user_email=None):
|
|||||||
else:
|
else:
|
||||||
print u' %s: %s' % (key, id[key])
|
print u' %s: %s' % (key, id[key])
|
||||||
print u''
|
print u''
|
||||||
|
if getSchemas:
|
||||||
|
print u'Custom Schemas:'
|
||||||
|
if u'customSchemas' in user:
|
||||||
|
for schema in user[u'customSchemas']:
|
||||||
|
print u' Schema: %s' % schema
|
||||||
|
for field in user[u'customSchemas'][schema]:
|
||||||
|
if type(user[u'customSchemas'][schema][field]) is list:
|
||||||
|
print ' %s:' % field
|
||||||
|
for an_item in user[u'customSchemas'][schema][field]:
|
||||||
|
print ' %s' % an_item[u'value']
|
||||||
|
else:
|
||||||
|
print u' %s: %s' % (field, user[u'customSchemas'][schema][field])
|
||||||
|
print
|
||||||
if getAliases:
|
if getAliases:
|
||||||
if u'aliases' in user:
|
if u'aliases' in user:
|
||||||
print u'Email Aliases:'
|
print u'Email Aliases:'
|
||||||
@ -5523,14 +5682,24 @@ def doPrintUsers():
|
|||||||
customer = customerId
|
customer = customerId
|
||||||
domain = None
|
domain = None
|
||||||
query = None
|
query = None
|
||||||
getGroupFeed = getLicenseFeed = False
|
projection = u'basic'
|
||||||
|
customFieldMask = None
|
||||||
|
getGroupFeed = getLicenseFeed = email_parts = False
|
||||||
todrive = False
|
todrive = False
|
||||||
deleted_only = orderBy = sortOrder = None
|
viewType = deleted_only = orderBy = sortOrder = None
|
||||||
i = 3
|
i = 3
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
if sys.argv[i].lower() == u'allfields':
|
if sys.argv[i].lower() == u'allfields':
|
||||||
fields = None
|
fields = None
|
||||||
i += 1
|
i += 1
|
||||||
|
elif sys.argv[i].lower() == u'custom':
|
||||||
|
user_fields.append(u'customSchemas')
|
||||||
|
if sys.argv[i+1].lower() == u'all':
|
||||||
|
projection = u'full'
|
||||||
|
else:
|
||||||
|
projection = u'custom'
|
||||||
|
customFieldMask = sys.argv[i+1]
|
||||||
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'todrive':
|
elif sys.argv[i].lower() == u'todrive':
|
||||||
todrive = True
|
todrive = True
|
||||||
i += 1
|
i += 1
|
||||||
@ -5547,6 +5716,9 @@ def doPrintUsers():
|
|||||||
elif orderBy.lower() in [u'givenname', u'firstname']:
|
elif orderBy.lower() in [u'givenname', u'firstname']:
|
||||||
orderBy= u'givenName'
|
orderBy= u'givenName'
|
||||||
i += 2
|
i += 2
|
||||||
|
elif sys.argv[i].lower() == u'userview':
|
||||||
|
viewType = u'domain_public'
|
||||||
|
i += 1
|
||||||
elif sys.argv[i].lower() in [u'ascending', u'descending']:
|
elif sys.argv[i].lower() in [u'ascending', u'descending']:
|
||||||
sortOrder = sys.argv[i].upper()
|
sortOrder = sys.argv[i].upper()
|
||||||
i += 1
|
i += 1
|
||||||
@ -5631,7 +5803,7 @@ def doPrintUsers():
|
|||||||
fields = u'nextPageToken,users(%s)' % u','.join(user_fields)
|
fields = u'nextPageToken,users(%s)' % u','.join(user_fields)
|
||||||
sys.stderr.write(u"Getting all users in Google Apps account (may take some time on a large account)...\n")
|
sys.stderr.write(u"Getting all users in Google Apps account (may take some time on a large account)...\n")
|
||||||
page_message = u'Got %%total_items%% users: %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%total_items%% users: %%first_item%% - %%last_item%%\n'
|
||||||
all_users = callGAPIpages(service=cd.users(), function=u'list', items=u'users', page_message=page_message, message_attribute=u'primaryEmail', customer=customer, domain=domain, fields=fields, showDeleted=deleted_only, maxResults=500, orderBy=orderBy, sortOrder=sortOrder, query=query)
|
all_users = callGAPIpages(service=cd.users(), function=u'list', items=u'users', page_message=page_message, message_attribute=u'primaryEmail', customer=customer, domain=domain, fields=fields, showDeleted=deleted_only, maxResults=500, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType, query=query, projection=projection, customFieldMask=customFieldMask)
|
||||||
titles = []
|
titles = []
|
||||||
attributes = []
|
attributes = []
|
||||||
for user in all_users:
|
for user in all_users:
|
||||||
@ -7078,6 +7250,8 @@ try:
|
|||||||
doCreateResource()
|
doCreateResource()
|
||||||
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
||||||
doSiteVerifyShow()
|
doSiteVerifyShow()
|
||||||
|
elif sys.argv[2].lower() in [u'schema']:
|
||||||
|
doCreateOrUpdateUserSchema()
|
||||||
else:
|
else:
|
||||||
print u'Error: invalid argument to "gam create..."'
|
print u'Error: invalid argument to "gam create..."'
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
@ -7103,6 +7277,8 @@ try:
|
|||||||
doUpdateNotification()
|
doUpdateNotification()
|
||||||
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
||||||
doSiteVerifyAttempt()
|
doSiteVerifyAttempt()
|
||||||
|
elif sys.argv[2].lower() in [u'schema', u'schemas']:
|
||||||
|
doCreateOrUpdateUserSchema()
|
||||||
else:
|
else:
|
||||||
showUsage()
|
showUsage()
|
||||||
print u'Error: invalid argument to "gam update..."'
|
print u'Error: invalid argument to "gam update..."'
|
||||||
@ -7129,6 +7305,8 @@ try:
|
|||||||
doGetNotifications()
|
doGetNotifications()
|
||||||
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
||||||
doGetSiteVerifications()
|
doGetSiteVerifications()
|
||||||
|
elif sys.argv[2].lower() in [u'schema', u'schemas']:
|
||||||
|
doGetUserSchema()
|
||||||
else:
|
else:
|
||||||
print u'Error: invalid argument to "gam info..."'
|
print u'Error: invalid argument to "gam info..."'
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
@ -7150,6 +7328,8 @@ try:
|
|||||||
doDeleteNotification()
|
doDeleteNotification()
|
||||||
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
elif sys.argv[2].lower() in [u'verify', u'verification']:
|
||||||
doDelSiteVerify()
|
doDelSiteVerify()
|
||||||
|
elif sys.argv[2].lower() in [u'schema', u'schemas']:
|
||||||
|
doDelSchema()
|
||||||
else:
|
else:
|
||||||
print u'Error: invalid argument to "gam delete"'
|
print u'Error: invalid argument to "gam delete"'
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
@ -7227,6 +7407,8 @@ try:
|
|||||||
doPrintLicenses()
|
doPrintLicenses()
|
||||||
elif sys.argv[2].lower() in [u'token', u'tokens']:
|
elif sys.argv[2].lower() in [u'token', u'tokens']:
|
||||||
doPrintTokens()
|
doPrintTokens()
|
||||||
|
elif sys.argv[2].lower() in [u'schema', u'schemas']:
|
||||||
|
doPrintUserSchemas()
|
||||||
else:
|
else:
|
||||||
print u'Error: invalid argument to "gam print..."'
|
print u'Error: invalid argument to "gam print..."'
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
Reference in New Issue
Block a user