Skip to content

Commit 40e878f

Browse files
author
Justin Wiley
committed
Duo fix.
1 parent a115a99 commit 40e878f

10 files changed

+73
-66
lines changed

gimme_aws_creds/duo.py

+2-8
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,11 @@
1414
# https://github.com/nathan-v/aws_okta_keyman
1515
"""All the Duo things."""
1616

17-
import sys
1817
import time
18+
from http.server import HTTPServer, BaseHTTPRequestHandler
1919
from multiprocessing import Process
2020

2121
import requests
22-
from . import ui
23-
24-
if sys.version_info[0] < 3: # pragma: no cover
25-
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
26-
else: # pragma: no cover
27-
from http.server import HTTPServer, BaseHTTPRequestHandler
2822

2923

3024
class PasscodeRequired(BaseException):
@@ -109,7 +103,7 @@ def duo_webserver(self):
109103

110104
def handler_with_html(self, *args):
111105
"""Call the handler and include the HTML."""
112-
QuietHandler(self.html, *args)
106+
return QuietHandler(self.html, *args)
113107

114108
def trigger_duo(self, passcode=""):
115109
"""Try to get a Duo Push without needing an iframe

gimme_aws_creds/okta.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
See the License for the specific language governing permissions and* limitations under the License.*
1111
"""
1212
import base64
13+
import copy
1314
import getpass
1415
import re
16+
import socket
1517
import time
1618
import uuid
19+
import webbrowser
1720
from codecs import decode
21+
from multiprocessing import Process
1822
from urllib.parse import parse_qs
1923
from urllib.parse import urlparse, quote
2024

@@ -31,11 +35,6 @@
3135
from . import errors, ui, version, duo
3236
from .registered_authenticators import RegisteredAuthenticators
3337

34-
from multiprocessing import Process
35-
import webbrowser
36-
import socket
37-
import copy
38-
3938

4039
class OktaClient(object):
4140
"""

gimme_aws_creds/ui.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717

1818
class UserInterface:
19-
def __init__(self, environ=os.environ, argv=sys.argv):
19+
def __init__(self, environ=os.environ, argv=None):
20+
if argv is None:
21+
argv = sys.argv
22+
2023
self.environ = environ.copy()
2124
self.environ_bkp = None
2225
self.argv = argv[:]
@@ -114,5 +117,6 @@ def read_input(self, hidden=False):
114117
def notify(self, message):
115118
builtins.print(message, file=sys.stderr)
116119

120+
117121
cli = CLIUserInterface()
118122
default = cli

lambda/lambda_handler.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import sys
2-
import os
31
import json
2+
import os
3+
import sys
4+
45
from okta.framework.ApiClient import ApiClient
56
from okta.framework.OktaError import OktaError
67

8+
79
def aws_account_info(event, context):
810
# We need access to the entire JSON response from the Okta APIs, so we need to
911
# use the low-level ApiClient instead of UsersClient and AppInstanceClient

requirements_dev.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
-r requirements.txt
22
responses>=0.5.1,<1.0.0
3-
nose>=1.3.7
4-
mock>=3.0.0,<4.0.0
3+
nose>=1.3.7

tests/test_aws_resolver.py

+21-21
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import responses
99
from nose.tools import assert_equals
1010

11-
import gimme_aws_creds.common as commondef
11+
import gimme_aws_creds.common as common_def
1212
from gimme_aws_creds.aws import AwsResolver
1313

1414

@@ -2056,26 +2056,26 @@ def setUp(self):
20562056
self.saml = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDJwOlJlc3BvbnNlIHhtbG5zOnNhbWwycD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBEZXN0aW5hdGlvbj0iaHR0cHM6Ly9zaWduaW4uYXdzLmFtYXpvbi5jb20vc2FtbCIgSUQ9ImlkMTMwMDM3MDA2MjEyMzQ1NDgwOTQxMTA2MzAiIElzc3VlSW5zdGFudD0iMjAxOC0wMy0xNFQyMjoxODo0MS44MzlaIiBWZXJzaW9uPSIyLjAiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+PHNhbWwyOklzc3VlciB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHkiPmh0dHA6Ly93d3cub2t0YS5jb20vZXhrYlhYWFhYWFhYWEh3MGg3PC9zYW1sMjpJc3N1ZXI+PGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+PGRzOlNpZ25lZEluZm8+PGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxkczpSZWZlcmVuY2UgVVJJPSIjaWQxMzAwMzcwMDYyMTIzNDU0ODA5NDExMDYzMCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyI+PGVjOkluY2x1c2l2ZU5hbWVzcGFjZXMgeG1sbnM6ZWM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIgUHJlZml4TGlzdD0ieHMiLz48L2RzOlRyYW5zZm9ybT48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5SL3NNbEdPYzRDZjUyTDkwTEV5Ym52VTd5R2owMERLNkhmNWMwNTBQYnNVPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZT5MM2NnUlgwa0FXNFRtVjNheVFzVnF3R2JMQnhMWjkvS0dYdjN2U3hZNUFyQm5yeUd3dmJzSlFTVS9EbE05TzhJNHZHdi9YNVpPN0Y4L1M2Wll2TnNlVWF2akVXNmxPcmNtakpEYkY3MTJiZ0M2YnF3Z280Z1BYaVM3aXZPa3ZMK2JSamEyblo5NUUzQ0hVWThIamVFQ0FObTlMaWU0SVFveStGZGdxMlk4TmxzVHZZME91UVkzVlBYREdjTFNiVWxZL294N2FneENUaHNGc1FZbDdqR1VZblRkbVlqdXU5L3E2dExaL2wvRyt6ZVBPdVhnK1JnUzBuTVJiRmV5dXljQzlnZm04TWpDLzRxbjhoTjlyNDFRMUU3dXNKZ0RySkxhd1lhbXVPekI1TzREUTV4Y096QVgrOXZkUU0xdEhuYmUrck1LYUl1S0xjRTlaczA3cURaNEE9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+YmxhaGJsYWg8L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbDJwOlN0YXR1cyB4bWxuczpzYW1sMnA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCI+PHNhbWwycDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiLz48L3NhbWwycDpTdGF0dXM+PHNhbWwyOkFzc2VydGlvbiB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9ImlkMTMwMDM3MDA2Mjc2MTQ5NjI5NjA5OTQxMiIgSXNzdWVJbnN0YW50PSIyMDE4LTAzLTE0VDIyOjE4OjQxLjgzOVoiIFZlcnNpb249IjIuMCIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj48c2FtbDI6SXNzdWVyIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6ZW50aXR5IiB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI+aHR0cDovL3d3dy5va3RhLmNvbS9leGtiWFhYWFhYWFhYSHcwaDc8L3NhbWwyOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNpZDEzMDAzNzAwNjI3NjE0OTYyOTYwOTk0MTIiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiPjxlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIHhtbG5zOmVjPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiIFByZWZpeExpc3Q9InhzIi8+PC9kczpUcmFuc2Zvcm0+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU+U0VNekJ3cHh1ZTgvLytVdTNwUHY0b1RTRzZ1blU5YXh1SlZreWQ2OXdRQT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU+R00zdmlhaklCK0p2RnpDSTF6eERIUWtMRmljc0JmSlorYTUxeksxT0p5YmRFR1hMNlN4VkY4MVFMK3FhcHNPQ1ZHbmtkMWtua20zYTBTMFVjbDRpTnNtRDFvT1g1UGliQjlFNkdXWHd3eUo5bTJRV1h4SUViRzVReXpWMGRJQmNKTTBiZk1XTEg1M3JiS0tDUnd5N0pYa0tNYS9leWFQTzNuVUZBVWFmbnEvOHZkd2hsTEJwTDhnWFB3RmJUL3dhK2FzMUROL3JQTDREaUxvUWpkZ2JMWlBDNUVXY3BpT0VBYjcreWg5OTFIaVlqOWN2NUFnME56VTJMTHNwcy94cjh6YzIzaEsrLys3UUpSS2taVkI3am0za0J3OEhaeDRxOUxqOWx3VlNwc1JHZy8xcEFCS25TVFo3VUp6YTEzMEZDWFVjaWZvWUxyODJ1M1ZiUzdEcjJRPT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPmJsYWhibGFoPC9kczpYNTA5Q2VydGlmaWNhdGU+PC9kczpYNTA5RGF0YT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PHNhbWwyOlN1YmplY3QgeG1sbnM6c2FtbDI9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPjxzYW1sMjpOYW1lSUQgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCI+am9obi5kb2VAbXljb3JwLmNvbTwvc2FtbDI6TmFtZUlEPjxzYW1sMjpTdWJqZWN0Q29uZmlybWF0aW9uIE1ldGhvZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlciI+PHNhbWwyOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj0iMjAxOC0wMy0xNFQyMjoyMzo0MS44MzlaIiBSZWNpcGllbnQ9Imh0dHBzOi8vc2lnbmluLmF3cy5hbWF6b24uY29tL3NhbWwiLz48L3NhbWwyOlN1YmplY3RDb25maXJtYXRpb24+PC9zYW1sMjpTdWJqZWN0PjxzYW1sMjpDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0wMy0xNFQyMjoxMzo0MS44MzlaIiBOb3RPbk9yQWZ0ZXI9IjIwMTgtMDMtMTRUMjI6MjM6NDEuODM5WiIgeG1sbnM6c2FtbDI9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPjxzYW1sMjpBdWRpZW5jZVJlc3RyaWN0aW9uPjxzYW1sMjpBdWRpZW5jZT51cm46YW1hem9uOndlYnNlcnZpY2VzPC9zYW1sMjpBdWRpZW5jZT48L3NhbWwyOkF1ZGllbmNlUmVzdHJpY3Rpb24+PC9zYW1sMjpDb25kaXRpb25zPjxzYW1sMjpBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMDMtMTRUMjI6MTg6MTAuOTIwWiIgU2Vzc2lvbkluZGV4PSJpZDE1MjEwNjU5MjE4MzkuMTM2MTc3OTMwOSIgeG1sbnM6c2FtbDI9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPjxzYW1sMjpBdXRobkNvbnRleHQ+PHNhbWwyOkF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0PC9zYW1sMjpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWwyOkF1dGhuQ29udGV4dD48L3NhbWwyOkF1dGhuU3RhdGVtZW50PjxzYW1sMjpBdHRyaWJ1dGVTdGF0ZW1lbnQgeG1sbnM6c2FtbDI9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPjxzYW1sMjpBdHRyaWJ1dGUgTmFtZT0iaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9TQU1ML0F0dHJpYnV0ZXMvUm9sZSIgTmFtZUZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDp1cmkiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPmFybjphd3M6aWFtOjo5ODc2NTQzMjE5ODc6c2FtbC1wcm92aWRlci9PS1RBLUlEUCxhcm46YXdzOmlhbTo6OTg3NjU0MzIxOTg3OnJvbGUvdGVzdHJvbGUzPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5hcm46YXdzOmlhbTo6OTg3NjU0MzIxOTg3OnNhbWwtcHJvdmlkZXIvT0tUQS1JRFAsYXJuOmF3czppYW06Ojk4NzY1NDMyMTk4Nzpyb2xlL3Rlc3Ryb2xlNDwvc2FtbDI6QXR0cmlidXRlVmFsdWU+PHNhbWwyOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+YXJuOmF3czppYW06Ojk4NzY1NDMyMTk4NzpzYW1sLXByb3ZpZGVyL09LVEEtSURQLGFybjphd3M6aWFtOjo5ODc2NTQzMjE5ODc6cm9sZS90ZXN0cm9sZTU8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPmFybjphd3M6aWFtOjowMTIzNDU2Nzg5MDE6c2FtbC1wcm92aWRlci9PS1RBLUlEUCxhcm46YXdzOmlhbTo6MDEyMzQ1Njc4OTAxOnJvbGUvdGVzdHJvbGUxPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5hcm46YXdzOmlhbTo6MDEyMzQ1Njc4OTAxOnNhbWwtcHJvdmlkZXIvT0tUQS1JRFAsYXJuOmF3czppYW06OjAxMjM0NTY3ODkwMTpyb2xlL3Rlc3Ryb2xlMjwvc2FtbDI6QXR0cmlidXRlVmFsdWU+PC9zYW1sMjpBdHRyaWJ1dGU+PHNhbWwyOkF0dHJpYnV0ZSBOYW1lPSJodHRwczovL2F3cy5hbWF6b24uY29tL1NBTUwvQXR0cmlidXRlcy9Sb2xlU2Vzc2lvbk5hbWUiIE5hbWVGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphdHRybmFtZS1mb3JtYXQ6YmFzaWMiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPmpvaG4uZG9lQG15Y29ycC5jb208L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgTmFtZT0iaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9TQU1ML0F0dHJpYnV0ZXMvU2Vzc2lvbkR1cmF0aW9uIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OmJhc2ljIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj4zNjAwPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48L3NhbWwyOkF0dHJpYnV0ZVN0YXRlbWVudD48L3NhbWwyOkFzc2VydGlvbj48L3NhbWwycDpSZXNwb25zZT4="
20572057

20582058
self.roles = []
2059-
self.roles.append(commondef.RoleSet(idp='arn:aws:iam::012345678901:saml-provider/OKTA-IDP',
2060-
role='arn:aws:iam::012345678901:role/testrole1',
2061-
friendly_account_name='Account: testaccount1 (012345678901)',
2062-
friendly_role_name='testrole1'))
2063-
self.roles.append(commondef.RoleSet(idp='arn:aws:iam::012345678901:saml-provider/OKTA-IDP',
2064-
role='arn:aws:iam::012345678901:role/testrole2',
2065-
friendly_account_name='Account: testaccount1 (012345678901)',
2066-
friendly_role_name='testrole2'))
2067-
self.roles.append(commondef.RoleSet(idp='arn:aws:iam::987654321987:saml-provider/OKTA-IDP',
2068-
role='arn:aws:iam::987654321987:role/testrole3',
2069-
friendly_account_name='Account: 987654321987',
2070-
friendly_role_name='testrole3'))
2071-
self.roles.append(commondef.RoleSet(idp='arn:aws:iam::987654321987:saml-provider/OKTA-IDP',
2072-
role='arn:aws:iam::987654321987:role/testrole4',
2073-
friendly_account_name='Account: 987654321987',
2074-
friendly_role_name='testrole4'))
2075-
self.roles.append(commondef.RoleSet(idp='arn:aws:iam::987654321987:saml-provider/OKTA-IDP',
2076-
role='arn:aws:iam::987654321987:role/testrole5',
2077-
friendly_account_name='Account: 987654321987',
2078-
friendly_role_name='testrole5'))
2059+
self.roles.append(common_def.RoleSet(idp='arn:aws:iam::012345678901:saml-provider/OKTA-IDP',
2060+
role='arn:aws:iam::012345678901:role/testrole1',
2061+
friendly_account_name='Account: testaccount1 (012345678901)',
2062+
friendly_role_name='testrole1'))
2063+
self.roles.append(common_def.RoleSet(idp='arn:aws:iam::012345678901:saml-provider/OKTA-IDP',
2064+
role='arn:aws:iam::012345678901:role/testrole2',
2065+
friendly_account_name='Account: testaccount1 (012345678901)',
2066+
friendly_role_name='testrole2'))
2067+
self.roles.append(common_def.RoleSet(idp='arn:aws:iam::987654321987:saml-provider/OKTA-IDP',
2068+
role='arn:aws:iam::987654321987:role/testrole3',
2069+
friendly_account_name='Account: 987654321987',
2070+
friendly_role_name='testrole3'))
2071+
self.roles.append(common_def.RoleSet(idp='arn:aws:iam::987654321987:saml-provider/OKTA-IDP',
2072+
role='arn:aws:iam::987654321987:role/testrole4',
2073+
friendly_account_name='Account: 987654321987',
2074+
friendly_role_name='testrole4'))
2075+
self.roles.append(common_def.RoleSet(idp='arn:aws:iam::987654321987:saml-provider/OKTA-IDP',
2076+
role='arn:aws:iam::987654321987:role/testrole5',
2077+
friendly_account_name='Account: 987654321987',
2078+
friendly_role_name='testrole5'))
20792079

20802080
def setUp_client(self, verify_ssl_certs):
20812081
resolver = AwsResolver(verify_ssl_certs)

tests/test_config.py

+15-19
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""Unit tests for gimme_aws_creds.config.Config"""
22
import argparse
33
import unittest
4-
5-
from mock import patch
4+
from unittest.mock import patch
65

76
from gimme_aws_creds import ui, errors
87
from gimme_aws_creds.config import Config
@@ -47,7 +46,7 @@ def test_get_args_username(self, mock_arg):
4746

4847
def test_read_config(self):
4948
"""Test to make sure getting config works"""
50-
test_ui = MockUserInterface(argv = [
49+
test_ui = MockUserInterface(argv=[
5150
"--profile",
5251
"myprofile",
5352
])
@@ -63,20 +62,23 @@ def test_read_config(self):
6362

6463
def test_read_config_inherited(self):
6564
"""Test to make sure getting config works when inherited"""
66-
test_ui = MockUserInterface(argv = [
65+
test_ui = MockUserInterface(argv=[
6766
"--profile",
6867
"myprofile",
6968
])
7069
with open(test_ui.HOME + "/.okta_aws_login_config", "w") as config_file:
71-
config_file.write("""
72-
[mybase]
73-
client_id = bar
74-
aws_appname = baz
75-
[myprofile]
76-
inherits = mybase
77-
client_id = foo
78-
aws_rolename = myrole
79-
""")
70+
config_file.write(
71+
"""
72+
[mybase]
73+
client_id = bar
74+
aws_appname = baz
75+
[myprofile]
76+
inherits = mybase
77+
client_id = foo
78+
aws_rolename = myrole
79+
"""
80+
)
81+
8082
config = Config(gac_ui=test_ui, create_config=False)
8183
config.conf_profile = "myprofile"
8284
profile_config = config.get_config_dict()
@@ -127,9 +129,3 @@ def test_fail_if_profile_not_found(self):
127129
config.get_config_dict()
128130
self.assertTrue('DEFAULT profile is missing! This is profile is required when not using --profile' == context.exception.message)
129131

130-
131-
class MockUserInterface(ui.UserInterface):
132-
133-
def __init__(self, argv):
134-
super().__init__(environ={}, argv=argv)
135-
self.HOME = tempfile.mkdtemp()

tests/test_main.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import unittest
2-
3-
from mock import patch
2+
from unittest.mock import patch
43

54
from gimme_aws_creds import errors
6-
from gimme_aws_creds.main import GimmeAWSCreds
75
from gimme_aws_creds.common import RoleSet
6+
from gimme_aws_creds.main import GimmeAWSCreds
87

98

109
class TestMain(unittest.TestCase):

tests/test_okta_client.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
import unittest
66
from contextlib import contextmanager
77
from io import StringIO
8+
from unittest.mock import patch
89
from urllib.parse import quote
910

1011
import requests
1112
import responses
1213
from fido2.attestation import PackedAttestation
1314
from fido2.ctap2 import AttestationObject, AuthenticatorData, AttestedCredentialData
14-
from mock import patch
1515
from nose.tools import assert_equals
1616

1717
from gimme_aws_creds import errors, ui
@@ -265,15 +265,15 @@ def test_get_state_token(self):
265265
def test_get_username_password_creds(self, mock_pass, mock_input):
266266
"""Test that initial authentication works with Okta"""
267267
result = self.client._get_username_password_creds()
268-
assert_equals(result, {'username': '[email protected]', 'password': '1234qwert' })
268+
self.assertDictEqual(result, {'username': '[email protected]', 'password': '1234qwert' })
269269

270270
@patch('getpass.getpass', return_value='1234qwert')
271271
@patch('builtins.input', return_value='')
272272
def test_passed_username(self, mock_pass, mock_input):
273273
"""Test that initial authentication works with Okta"""
274274
self.client.set_username('[email protected]')
275275
result = self.client._get_username_password_creds()
276-
assert_equals(result, {'username': '[email protected]', 'password': '1234qwert' })
276+
self.assertDictEqual(result, {'username': '[email protected]', 'password': '1234qwert' })
277277

278278
# @patch('getpass.getpass', return_value='1234qwert')
279279
# @patch('builtins.input', return_value='ann')

tests/user_interface_mock.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
import tempfile
2-
from abc import ABC
32

43
from gimme_aws_creds import ui
54

65

7-
class MockUserInterface(ui.UserInterface, ABC):
6+
class MockUserInterface(ui.UserInterface):
7+
def result(self, result):
8+
pass
9+
10+
def prompt(self, message):
11+
pass
12+
13+
def message(self, message):
14+
pass
15+
16+
def read_input(self, hidden=False):
17+
pass
18+
19+
def notify(self, message):
20+
pass
21+
822
def __init__(self, environ=None, argv=None):
923
super().__init__(environ=environ or {}, argv=argv or [])
1024
self.HOME = tempfile.mkdtemp()

0 commit comments

Comments
 (0)