diff --git a/src/GamCommands.txt b/src/GamCommands.txt index a69b8d87..05346d31 100644 --- a/src/GamCommands.txt +++ b/src/GamCommands.txt @@ -85,6 +85,7 @@ If an item contains spaces, it should be surrounded by " or '. ::= ::= ::= /|(/ ::= id:||anyone|anyonewithlink ::= ::= ::= @@ -458,7 +459,7 @@ gam print admins [todrive] [user ] [role ] gam print adminroles|roles [todrive] gam create domain -gam update domain [primary] +gam update domain primary gam delete domain gam info domain [] gam print domains [todrive] @@ -655,10 +656,10 @@ gam transfer drive [keepuser] gam delete|del emptydrivefolders gam add drivefileacl anyone|(user )|(group )|(domain ) - [withlink] [role reader|commenter|writer|owner|editor] [sendmail] [emailmessage ] -gam update drivefileacl id:| - [withlink] [role reader|commenter|writer|owner|editor] [transferownership ] -gam delete|del drivefileacl id:| + (role reader|commenter|writer|owner|editor) [withlink] [sendmail] [emailmessage ] +gam update drivefileacl + (role reader|commenter|writer|owner|editor) [withlink] [transferownership ] +gam delete|del drivefileacl gam show drivefileacl gam delete|del alias|aliases diff --git a/src/gam.py b/src/gam.py index 2f8901f3..9a40230d 100755 --- a/src/gam.py +++ b/src/gam.py @@ -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)