Skip to content

Commit ec3004b

Browse files
authored
Merge pull request #72 from ramsperger/master
Fix issue where sorting misaligns the list indexes.
2 parents 9dee43b + 3027f2c commit ec3004b

File tree

2 files changed

+45
-21
lines changed

2 files changed

+45
-21
lines changed

aws_okta_keyman/aws.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,28 +179,34 @@ def available_roles(self):
179179
multiple_accounts = False
180180
first_account = ''
181181
formatted_roles = []
182-
i = 0
183182
for role in self.assertion.roles():
184183
account = role['role'].split(':')[4]
185184
role_name = role['role'].split(':')[5].split('/')[1]
186185
formatted_roles.append({
187186
'account': account,
188187
'role_name': role_name,
189188
'arn': role['role'],
190-
'principle': role['principle'],
191-
'roleIdx': i
189+
'principle': role['principle']
192190
})
193191
if first_account == '':
194192
first_account = account
195193
elif first_account != account:
196194
multiple_accounts = True
197-
i = i + 1
198195

199196
if multiple_accounts:
200197
formatted_roles = self.account_ids_to_names(formatted_roles)
201198

202-
self.roles = sorted(formatted_roles,
203-
key=lambda k: (k['account'], k['role_name']))
199+
formatted_roles = sorted(formatted_roles,
200+
key=lambda k: (k['account'], k['role_name']))
201+
202+
# set the role role index after sorting
203+
i = 0
204+
for role in formatted_roles:
205+
role['roleIdx'] = i
206+
i = i + 1
207+
208+
self.roles = formatted_roles
209+
204210
return self.roles
205211

206212
def assume_role(self, print_only=False):

aws_okta_keyman/test/aws_test.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,15 @@ def test_assume_role_multiple(self, mock_write):
271271
def test_assume_role_preset(self, mock_write):
272272
mock_write.return_value = None
273273
assertion = mock.Mock()
274-
assertion.roles.return_value = [{'arn': '', 'principle': ''}]
274+
275+
roles = [{'role': '::::1:role/role1', 'principle': '', 'arn': '1'},
276+
{'role': '::::1:role/role2', 'principle': '', 'arn': '2'},
277+
{'role': '::::1:role/role3', 'principle': '', 'arn': '3'}]
278+
279+
assertion.roles.return_value = roles
275280
session = aws.Session('BogusAssertion')
276-
session.role = 0
277-
session.roles = [{'arn': '', 'principle': ''}]
281+
session.role = 1
282+
session.roles = roles
278283
session.assertion = assertion
279284
sts = {'Credentials':
280285
{'AccessKeyId': 'AKI',
@@ -296,6 +301,13 @@ def test_assume_role_preset(self, mock_write):
296301
mock_write.assert_has_calls([
297302
mock.call()
298303
])
304+
session.sts.assert_has_calls([
305+
mock.call.assume_role_with_saml(
306+
RoleArn='2',
307+
PrincipalArn='',
308+
SAMLAssertion=mock.ANY,
309+
DurationSeconds=3600)
310+
])
299311

300312
@mock.patch('aws_okta_keyman.aws.Session._print_creds')
301313
@mock.patch('aws_okta_keyman.aws.Session._write')
@@ -420,23 +432,29 @@ def test_export_creds_to_var_string(self):
420432
self.assertEqual(ret, expected)
421433

422434
def test_available_roles(self):
423-
roles = [{'role': '::::1:role/role', 'principle': ''},
424-
{'role': '::::1:role/role', 'principle': ''}]
435+
roles = [{'role': '::::1:role/role1', 'principle': ''},
436+
{'role': '::::1:role/role3', 'principle': ''},
437+
{'role': '::::1:role/role2', 'principle': ''}]
425438
session = aws.Session('BogusAssertion')
426439
session.assertion = mock.MagicMock()
427440
session.assertion.roles.return_value = roles
428-
expected = [
429-
{'account': '1', 'role_name': 'role',
430-
'principle': '', 'arn': '::::1:role/role',
431-
'roleIdx': 0},
432-
{'account': '1', 'role_name': 'role',
433-
'principle': '', 'arn': '::::1:role/role',
434-
'roleIdx': 1}
435-
]
436441

437442
result = session.available_roles()
438443

439444
print(result)
445+
446+
expected = [
447+
{'account': '1', 'role_name': 'role1',
448+
'principle': '', 'arn': '::::1:role/role1',
449+
'roleIdx': 0},
450+
{'account': '1', 'role_name': 'role2',
451+
'principle': '', 'arn': '::::1:role/role2',
452+
'roleIdx': 1},
453+
{'account': '1', 'role_name': 'role3',
454+
'principle': '', 'arn': '::::1:role/role3',
455+
'roleIdx': 2}
456+
]
457+
440458
self.assertEqual(expected, result)
441459

442460
def test_available_roles_multiple_accounts(self):
@@ -453,9 +471,9 @@ def test_available_roles_multiple_accounts(self):
453471
session.account_ids_to_names.return_value = roles_full
454472
expected = [
455473
{'account': '1', 'role_name': 'role',
456-
'principle': '', 'arn': '::::1:role/role'},
474+
'principle': '', 'arn': '::::1:role/role', 'roleIdx': 0},
457475
{'account': '2', 'role_name': 'role',
458-
'principle': '', 'arn': '::::2:role/role'}
476+
'principle': '', 'arn': '::::2:role/role', 'roleIdx': 1}
459477
]
460478

461479
result = session.available_roles()

0 commit comments

Comments
 (0)