diff --git a/src/admin-settings-v1.json b/src/admin-settings-v2.json similarity index 99% rename from src/admin-settings-v1.json rename to src/admin-settings-v2.json index 5f75e3cb..3b8b4393 100644 --- a/src/admin-settings-v1.json +++ b/src/admin-settings-v2.json @@ -1,11 +1,11 @@ { "kind": "discovery#restDescription", "discoveryVersion": "v1", - "id": "admin-settings:v1", + "id": "admin-settings:v2", "name": "admin-settings", - "version": "v1", - "revision": "20130823", - "title": "Admin Settings API (read-only calls)", + "version": "v2", + "revision": "20160616", + "title": "Admin Settings API", "description": "Lets you access Google Apps Admin Settings", "ownerDomain": "google.com", "ownerName": "Google", diff --git a/src/gam.py b/src/gam.py index 2f8901f3..7b52abba 100755 --- a/src/gam.py +++ b/src/gam.py @@ -765,7 +765,7 @@ def callGAPIpages(service, function, items, page_message=None, message_attribute return all_pages API_VER_MAPPING = { - u'admin-settings': u'v1', + u'admin-settings': u'v2', u'appsactivity': u'v1', u'calendar': u'v3', u'classroom': u'v1', @@ -3275,8 +3275,13 @@ def doDriveActivity(users): def printPermission(permission): if u'name' in permission: print convertUTF8(permission[u'name']) - elif (u'id' in permission) and (permission[u'id'] == u'anyone'): - print u'Anyone' + elif u'id' in permission: + if permission[u'id'] == u'anyone': + print u'Anyone' + elif permission[u'id'] == u'anyoneWithLink': + print u'Anyone with Link' + else: + print permission[u'id'] for key in permission: if key in [u'name', u'kind', u'etag', u'selfLink',]: continue @@ -3291,17 +3296,26 @@ def showDriveFileACL(users): printPermission(permission) print u'' +def getPermissionId(argstr): + permissionId = argstr.strip().lower() + if permissionId[:3] == u'id:': + return (False, argstr.strip()[3:]) + if permissionId == u'anyone': + return (False, permissionId) + if permissionId == u'anyonewithlink': + return (False, u'anyoneWithLink') + if permissionId.find(u'@') == -1: + permissionId = u'%s@%s' % (permissionId, GC_Values[GC_DOMAIN]) + return (True, permissionId) + def delDriveFileACL(users): fileId = sys.argv[5] - permissionId = unicode(sys.argv[6]) + isEmail, permissionId = getPermissionId(sys.argv[6]) for user in users: drive = buildGAPIServiceObject(u'drive', user) - if permissionId[:3].lower() == u'id:': - permissionId = permissionId[3:] - elif permissionId.lower() in [u'anyone']: - pass - else: + if isEmail: permissionId = callGAPI(drive.permissions(), u'getIdForEmail', email=permissionId, fields=u'id')[u'id'] + isEmail = False print u'Removing permission for %s from %s' % (permissionId, fileId) callGAPI(drive.permissions(), u'delete', fileId=fileId, permissionId=permissionId) @@ -3349,7 +3363,7 @@ def addDriveFileACL(users): def updateDriveFileACL(users): fileId = sys.argv[5] - permissionId = unicode(sys.argv[6]) + isEmail, permissionId = getPermissionId(sys.argv[6]) transferOwnership = None body = {} i = 7 @@ -3379,10 +3393,9 @@ def updateDriveFileACL(users): sys.exit(2) for user in users: drive = buildGAPIServiceObject(u'drive', user) - if permissionId[:3].lower() == u'id:': - permissionId = permissionId[3:] - else: + if isEmail: permissionId = callGAPI(drive.permissions(), u'getIdForEmail', email=permissionId, fields=u'id')[u'id'] + isEmail = False print u'updating permissions for %s to file %s' % (permissionId, fileId) result = callGAPI(drive.permissions(), u'patch', fileId=fileId, permissionId=permissionId, transferOwnership=transferOwnership, body=body) printPermission(result) diff --git a/src/gam.spec b/src/gam.spec index ae53861f..69593922 100644 --- a/src/gam.spec +++ b/src/gam.spec @@ -10,8 +10,8 @@ for d in a.datas: a.datas.remove(d) break a.datas += [('httplib2/cacerts.txt', 'httplib2\cacerts.txt', 'DATA')] +a.datas += [('admin-settings-v2.json', 'admin-settings-v2.json', 'DATA')] a.datas += [('cloudprint-v2.json', 'cloudprint-v2.json', 'DATA')] -a.datas += [('admin-settings-v1.json', 'admin-settings-v1.json', 'DATA')] pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts,