示例#1
0
    def test_auth(self):
        client = okta.Okta("organization", "username", "password")
        client._request = mock.MagicMock(name="request")
        client._request.side_effect = [SUCCESS_RESPONSE]

        ret = client.auth()
        self.assertEquals(ret, None)
示例#2
0
 def test_validate_mfa(self):
     client = okta.Okta('organization', 'username', 'password')
     client._request = mock.MagicMock(name='_request')
     client._request.return_value = SUCCESS_RESPONSE
     ret = client.validate_mfa('fid', 'token', '123456')
     self.assertEquals(ret, True)
     self.assertEquals(client.session_token, 'XXXTOKENXXX')
示例#3
0
    def test_auth(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [SUCCESS_RESPONSE]

        ret = client.auth()
        self.assertEquals(ret, None)
示例#4
0
    def test_request_with_full_url(self):
        client = okta.Okta("organization", "username", "password")
        client.session = mock.MagicMock(name="session")

        # Ultimately this is the dict we want to get back
        expected_dict = {"ok": True}

        # Create a fake requests.post() response object mock that returns the
        # expected_dict above when json() is called
        fake_response_object = mock.MagicMock(name="response")
        fake_response_object.json.return_value = expected_dict

        client.session.post.return_value = fake_response_object
        ret = client._request("http://test/test", {"test": True})

        # Validate that the call went out as expected, with the supplied input
        client.session.post.assert_called_with(
            headers={
                "Content-Type": "application/json",
                "Accept": "application/json"
            },
            json={"test": True},
            url="http://test/test",
            allow_redirects=False,
        )

        # Validate that we got back the expected_dict
        self.assertEquals(ret, expected_dict)
示例#5
0
    def test_auth_requires_mfa_enroll(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [MFA_ENROLL_RESPONSE]

        with self.assertRaises(okta.UnknownError):
            client.auth()
示例#6
0
    def test_request_with_full_url(self):
        client = okta.Okta('organization', 'username', 'password')
        client.session = mock.MagicMock(name='session')

        # Ultimately this is the dict we want to get back
        expected_dict = {'ok': True}

        # Create a fake requests.post() response object mock that returns the
        # expected_dict above when json() is called
        fake_response_object = mock.MagicMock(name='response')
        fake_response_object.json.return_value = expected_dict

        client.session.post.return_value = fake_response_object
        ret = client._request('http://test/test', {'test': True})

        # Validate that the call went out as expected, with the supplied input
        client.session.post.assert_called_with(headers={
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        },
                                               json={'test': True},
                                               url='http://test/test',
                                               allow_redirects=False)

        # Validate that we got back the expected_dict
        self.assertEquals(ret, expected_dict)
示例#7
0
    def test_auth_throws_passcode_required(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')

        client._request.side_effect = [MFA_CHALLENGE_RESPONSE_PASSCODE]

        with self.assertRaises(okta.PasscodeRequired):
            client.auth()
示例#8
0
    def test_auth_with_unexpected_response(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')

        client._request.side_effect = [{}]

        with self.assertRaises(okta.UnknownError):
            client.auth()
示例#9
0
    def test_validate_mfa_unknown_error(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')
        resp = requests.Response()
        resp.status_code = 500
        resp.body = 'Something bad happened'
        client._request.side_effect = requests.exceptions.HTTPError(
            response=resp)

        with self.assertRaises(okta.UnknownError):
            client.validate_mfa('fid', 'token', '123456')
示例#10
0
    def test_auth_bad_password(self):
        client = okta.Okta("organization", "username", "password")
        client._request = mock.MagicMock(name="_request")

        resp = requests.Response()
        resp.status_code = 401
        resp.body = "Bad Password"
        client._request.side_effect = requests.exceptions.HTTPError(
            response=resp)

        with self.assertRaises(okta.InvalidPassword):
            client.auth()
示例#11
0
    def test_auth_trigger_okta_verify(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')
        client.okta_verify_with_push = mock.MagicMock(
            name='okta_verify_with_push')

        client._request.side_effect = [MFA_CHALLENGE_RESPONSE_OKTA_VERIFY]

        ret = client.auth()
        self.assertEquals(ret, None)
        client.okta_verify_with_push.assert_has_calls(
            [mock.call('abcd', 'token')])
示例#12
0
    def test_auth_bad_password(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')

        resp = requests.Response()
        resp.status_code = 401
        resp.body = 'Bad Password'
        client._request.side_effect = requests.exceptions.HTTPError(
            response=resp)

        with self.assertRaises(okta.InvalidPassword):
            client.auth()
示例#13
0
    def test_request_bad_response(self):
        client = okta.Okta("organization", "username", "password")
        client.session = mock.MagicMock(name="session")

        class TestExc(Exception):
            """Test Exception"""

        fake_response_object = mock.MagicMock(name="response")
        fake_response_object.raise_for_status.side_effect = TestExc()

        client.session.post.return_value = fake_response_object
        with self.assertRaises(TestExc):
            client._request("/test", {"test": True})
示例#14
0
    def test_okta_verify_with_push_rejected(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')

        client._request.side_effect = [
            MFA_WAITING_RESPONSE,
            MFA_WAITING_RESPONSE,
            MFA_WAITING_RESPONSE,
            MFA_REJECTED_RESPONSE,
        ]

        ret = client.okta_verify_with_push('123', 'token', sleep=0.1)
        self.assertEquals(ret, False)
示例#15
0
    def test_request_bad_response(self):
        client = okta.Okta('organization', 'username', 'password')
        client.session = mock.MagicMock(name='session')

        class TestExc(Exception):
            '''Test Exception'''

        fake_response_object = mock.MagicMock(name='response')
        fake_response_object.raise_for_status.side_effect = TestExc()

        client.session.post.return_value = fake_response_object
        with self.assertRaises(TestExc):
            client._request('/test', {'test': True})
示例#16
0
    def test_auth_http_timeout(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [MFA_REQUIRED_RESPONSE]

        test_factor = mock.MagicMock(name='test_factor')
        test_factor.name.return_value = 'test_factor'
        test_factor.verify.side_effect = requests.exceptions.ReadTimeout

        client.supported_factors = [test_factor]
        with self.assertRaises(okta.ExhaustedFactors):
            client.auth()

        self.assertEquals(client.session_token, None)
示例#17
0
    def test_verify_no_supported_factors(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [MFA_REQUIRED_RESPONSE]

        test_factor = mock.MagicMock(name='test_factor')
        test_factor.name.return_value = 'phone'
        test_factor.verify.side_effect = factor.FactorVerificationFailed

        client.supported_factors = [test_factor]
        with self.assertRaises(okta.ExhaustedFactors):
            client.auth()

        self.assertEquals(client.session_token, None)
示例#18
0
    def test_auth_mfa_verify_fail(self):
        client = okta.Okta("organization", "username", "password")
        client._request = mock.MagicMock(name="request")
        client._request.side_effect = [MFA_REQUIRED_RESPONSE]

        test_factor = mock.MagicMock(name="test_factor")
        test_factor.name.return_value = "test_factor"
        test_factor.verify.side_effect = factor.FactorVerificationFailed

        client.supported_factors = [test_factor]
        with self.assertRaises(okta.ExhaustedFactors):
            client.auth()

        self.assertEquals(client.session_token, None)
示例#19
0
    def test_auth_mfa_verify(self):
        client = okta.Okta("organization", "username", "password")
        client._request = mock.MagicMock(name="request")
        client._request.side_effect = [MFA_REQUIRED_RESPONSE]

        test_factor = mock.MagicMock(name="test_factor")
        test_factor.name.return_value = "test_factor"
        test_factor.verify.return_value = SUCCESS_RESPONSE

        client.supported_factors = [test_factor]
        client.auth()

        test_factor.verify.assert_called_with("abcd", "token", sleep=1)
        self.assertEquals(client.session_token, "XXXTOKENXXX")
示例#20
0
    def test_auth_mfa_verify(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [MFA_REQUIRED_RESPONSE]

        test_factor = mock.MagicMock(name='test_factor')
        test_factor.name.return_value = 'test_factor'
        test_factor.verify.return_value = SUCCESS_RESPONSE

        client.supported_factors = [test_factor]
        client.auth()

        test_factor.verify.assert_called_with('abcd', 'token', sleep=1)
        self.assertEquals(client.session_token, 'XXXTOKENXXX')
示例#21
0
    def test_auth_verify_two_interrupt(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [MFA_REQUIRED_RESPONSE_TWOFACTORS]

        factor_one = mock.MagicMock(name='factor_one')
        factor_one.name.return_value = 'factor_one'
        factor_one.verify.side_effect = KeyboardInterrupt

        factor_two = mock.MagicMock(name='factor_two')
        factor_two.name.return_value = 'factor_two'
        factor_two.verify.return_value = SUCCESS_RESPONSE

        client.supported_factors = [factor_one, factor_two]
        client.auth()

        factor_two.verify.assert_called_with('2', 'token', sleep=1)
        self.assertEquals(client.session_token, 'XXXTOKENXXX')
示例#22
0
    def test_auth_verify_two_interrupt(self):
        client = okta.Okta("organization", "username", "password")
        client._request = mock.MagicMock(name="request")
        client._request.side_effect = [MFA_REQUIRED_RESPONSE_TWOFACTORS]

        factor_one = mock.MagicMock(name="factor_one")
        factor_one.name.return_value = "factor_one"
        factor_one.verify.side_effect = KeyboardInterrupt

        factor_two = mock.MagicMock(name="factor_two")
        factor_two.name.return_value = "factor_two"
        factor_two.verify.return_value = SUCCESS_RESPONSE

        client.supported_factors = [factor_one, factor_two]
        client.auth()

        factor_two.verify.assert_called_with("2", "token", sleep=1)
        self.assertEquals(client.session_token, "XXXTOKENXXX")
示例#23
0
    def test_auth_verify_interrupt(self):
        client = okta.Okta("organization", "username", "password")
        client._request = mock.MagicMock(name="request")
        client._request.side_effect = [MFA_REQUIRED_RESPONSE_TWOFACTORS_SAME]

        test_factor = mock.MagicMock(name="factor_one")
        test_factor.name.return_value = "factor_one"
        test_factor.verify.side_effect = [KeyboardInterrupt, SUCCESS_RESPONSE]

        client.supported_factors = [test_factor]
        client.auth()

        test_factor.verify.assert_has_calls([
            mock.call("1", "token", sleep=1),
            mock.call("2", "token", sleep=1)
        ])

        self.assertEquals(client.session_token, "XXXTOKENXXX")
示例#24
0
    def test_auth_verify_interrupt(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='request')
        client._request.side_effect = [MFA_REQUIRED_RESPONSE_TWOFACTORS_SAME]

        test_factor = mock.MagicMock(name='factor_one')
        test_factor.name.return_value = 'factor_one'
        test_factor.verify.side_effect = [KeyboardInterrupt, SUCCESS_RESPONSE]

        client.supported_factors = [test_factor]
        client.auth()

        test_factor.verify.assert_has_calls([
            mock.call('1', 'token', sleep=1),
            mock.call('2', 'token', sleep=1)
        ])

        self.assertEquals(client.session_token, 'XXXTOKENXXX')
示例#25
0
    def test_validate_mfa_invalid_token(self):
        client = okta.Okta('organization', 'username', 'password')
        client._request = mock.MagicMock(name='_request')
        resp = requests.Response()
        resp.status_code = 403
        client._request.side_effect = requests.exceptions.HTTPError(
            response=resp)

        ret = client.validate_mfa('fid', 'token', '123456')
        self.assertEquals(False, ret)

        client._request.assert_has_calls([
            mock.call('/authn/factors/fid/verify', {
                'fid': 'fid',
                'stateToken': 'token',
                'passCode': '123456'
            })
        ])
示例#26
0
 def test_set_token(self):
     client = okta.Okta("organization", "username", "password")
     client.session = mock.MagicMock(name="session")
     client.set_token(SUCCESS_RESPONSE)
     self.assertEquals(client.session_token, "XXXTOKENXXX")
示例#27
0
 def test_validate_mfa_too_short(self):
     client = okta.Okta('organization', 'username', 'password')
     ret = client.validate_mfa('fid', 'token', '123')
     self.assertEquals(False, ret)
示例#28
0
    def test_init_blank_inputs(self):
        with self.assertRaises(EmptyInput):
            okta.Okta(organization='', username='******', password='******')

        with self.assertRaises(okta.EmptyInput):
            okta.Okta(organization=None, username='******', password='******')
示例#29
0
 def test_set_token(self):
     client = okta.Okta('organization', 'username', 'password')
     client.session = mock.MagicMock(name='session')
     client.set_token(SUCCESS_RESPONSE)
     self.assertEquals(client.session_token, 'XXXTOKENXXX')