diff options
-rwxr-xr-x | duo_openvpn.py | 7 | ||||
-rw-r--r-- | test_duo_openvpn.py | 23 |
2 files changed, 25 insertions, 5 deletions
diff --git a/duo_openvpn.py b/duo_openvpn.py index eb3a55c..a82839a 100755 --- a/duo_openvpn.py +++ b/duo_openvpn.py @@ -302,11 +302,12 @@ def failure(control): sys.exit(1) -def preauth(client, control, username): +def preauth(client, control, username, ipaddr): log('pre-authentication for %s' % username) response = client.json_api_call('POST', '/rest/v1/preauth', { - 'user': username, + 'user': username, + 'ipaddr': ipaddr }) result = response.get('result') @@ -389,7 +390,7 @@ def main(Client=Client, environ=os.environ): ) try: - default_factor = preauth(client, control, username) + default_factor = preauth(client, control, username, ipaddr) except Exception, e: log(str(e)) failure(control) diff --git a/test_duo_openvpn.py b/test_duo_openvpn.py index 86420d5..df13d10 100644 --- a/test_duo_openvpn.py +++ b/test_duo_openvpn.py @@ -46,7 +46,10 @@ class TestIntegration(unittest.TestCase): PROXY_HOST = 'expected proxy host' PROXY_PORT = 'expected proxy port' EXPECTED_USER_AGENT = 'duo_openvpn/' + duo_openvpn.__version__ - EXPECTED_PREAUTH_PARAMS = 'user=expected+username' + EXPECTED_PREAUTH_PARAMS = ( + 'ipaddr=expected_ipaddr' + '&user=expected+username' + ) EXPECTED_AUTH_PATH = '/rest/v1/auth' EXPECTED_PREAUTH_PATH = '/rest/v1/preauth' EXPECTED_AUTH_PARAMS = ( @@ -330,7 +333,23 @@ class TestIntegration(unittest.TestCase): def test_auth_no_ipaddr(self): environ = self.normal_environ() environ.pop('ipaddr') - self.expect_preauth('auth') + self.expect_request( + method='POST', + path=self.EXPECTED_PREAUTH_PATH, + params='ipaddr=0.0.0.0' + '&user=expected+username', + response=MockResponse( + status=200, + body=json.dumps({ + 'stat': 'OK', + 'response': { + 'result': 'auth', + 'status': 'expected status', + 'factors': {'default': 'push1'}, + }, + }), + ), + ) self.expect_request( method='POST', path=self.EXPECTED_AUTH_PATH, |