expireTime can now be updated (#1298)

This commit is contained in:
Ross Scroggs
2020-12-21 17:42:06 -08:00
committed by GitHub
parent 48526b815e
commit 6e1b1ed9d5

View File

@ -462,7 +462,7 @@ def update():
def _getRoleAndUsers(): def _getRoleAndUsers():
checkSuspended = None checkSuspended = None
role = None role = ROLE_MEMBER
expireTime = None expireTime = None
i = 5 i = 5
if sys.argv[i].lower() in GROUP_ROLES_MAP: if sys.argv[i].lower() in GROUP_ROLES_MAP:
@ -472,6 +472,9 @@ def update():
checkSuspended = sys.argv[i].lower() == 'suspended' checkSuspended = sys.argv[i].lower() == 'suspended'
i += 1 i += 1
if sys.argv[i].lower() in ['expire', 'expires']: if sys.argv[i].lower() in ['expire', 'expires']:
if role != ROLE_MEMBER:
controlflow.invalid_argument_exit(
sys.argv[i], f'role {role}')
expireTime = sys.argv[i+1] expireTime = sys.argv[i+1]
i += 2 i += 2
if sys.argv[i].lower() in usergroup_types: if sys.argv[i].lower() in usergroup_types:
@ -500,8 +503,6 @@ def update():
return return
if myarg == 'add': if myarg == 'add':
role, expireTime, users_email = _getRoleAndUsers() role, expireTime, users_email = _getRoleAndUsers()
if not role:
role = ROLE_MEMBER
if len(users_email) > 1: if len(users_email) > 1:
sys.stderr.write( sys.stderr.write(
f'Group: {group}, Will add {len(users_email)} {role}s.\n') f'Group: {group}, Will add {len(users_email)} {role}s.\n')
@ -631,8 +632,6 @@ def update():
) )
elif myarg == 'update': elif myarg == 'update':
role, expireTime, users_email = _getRoleAndUsers() role, expireTime, users_email = _getRoleAndUsers()
if not role:
role = ROLE_MEMBER
if len(users_email) > 1: if len(users_email) > 1:
sys.stderr.write( sys.stderr.write(
f'Group: {group}, Will update {len(users_email)} {role}s.\n' f'Group: {group}, Will update {len(users_email)} {role}s.\n'
@ -649,11 +648,22 @@ def update():
name = membership_email_to_id(ci, parent, users_email[0]) name = membership_email_to_id(ci, parent, users_email[0])
addRoles = [] addRoles = []
removeRoles = [] removeRoles = []
updateRoles = []
current_roles = gapi.call(ci.groups().memberships(), current_roles = gapi.call(ci.groups().memberships(),
'get', 'get',
name=name, name=name,
fields='roles').get('roles', []) fields='roles').get('roles', [])
current_roles = [role['name'] for role in current_roles] current_roles = [crole['name'] for crole in current_roles]
if expireTime:
if ROLE_MEMBER in current_roles:
updateRoles.append(
{'fieldMask': 'expiryDetail.expireTime',
'membershipRole': {'name': role,
'expiryDetail': {'expireTime': expireTime}}})
else:
addRoles.append(
{'name': role, 'expiryDetail': {'expireTime': expireTime}})
else:
for crole in current_roles: for crole in current_roles:
if crole not in {ROLE_MEMBER, role}: if crole not in {ROLE_MEMBER, role}:
removeRoles.append(crole) removeRoles.append(crole)
@ -661,22 +671,14 @@ def update():
new_role = {'name': role} new_role = {'name': role}
if role == ROLE_MEMBER and expireTime: if role == ROLE_MEMBER and expireTime:
new_role['expiryDetail'] = {'expireTime': expireTime} new_role['expiryDetail'] = {'expireTime': expireTime}
expireTime = None
addRoles.append(new_role) addRoles.append(new_role)
bodys = [] bodys = []
if addRoles: if addRoles:
bodys.append({'addRoles': addRoles}) bodys.append({'addRoles': addRoles})
if removeRoles: if removeRoles:
bodys.append({'removeRoles': removeRoles}) bodys.append({'removeRoles': removeRoles})
if expireTime: if updateRoles:
bodys.append({ bodys.append({'updateRolesParams': updateRoles})
'name': ROLE_MEMBER,
# Note this doesn't actually work for some reason. Only known method to change
# expire time right now is to remove/re-add member.
'expiryDetail': {
'expireTime': expireTime
}
})
for body in bodys: for body in bodys:
try: try:
gapi.call(ci.groups().memberships(), gapi.call(ci.groups().memberships(),