Example #1
0
    def test_start_session_okta_failure(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_assertion.side_effect = okta.UnknownError

        with self.assertRaises(okta.UnknownError):
            keyman.start_session()
Example #2
0
    def test_start_session_okta_failure(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_assertion.side_effect = okta.UnknownError

        with self.assertRaises(okta.UnknownError):
            keyman.start_session()
Example #3
0
    def test_auth_okta(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.return_value = None

        ret = keyman.auth_okta()
        self.assertEqual(ret, None)
Example #4
0
    def test_auth_okta_unknown_error(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.UnknownError

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Example #5
0
    def test_auth_okta_bad_password(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.InvalidPassword

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Example #6
0
    def test_auth_okta_bad_password(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.InvalidPassword

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Example #7
0
    def test_auth_okta(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.return_value = None

        ret = keyman.auth_okta()
        self.assertEqual(ret, None)
Example #8
0
    def test_auth_okta_unknown_error(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.UnknownError

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Example #9
0
    def test_start_session_xml_failure(self, session_mock, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        xml_error = xml.etree.ElementTree.ParseError()
        session_mock.side_effect = xml_error

        with self.assertRaises(aws.InvalidSaml):
            keyman.start_session()
Example #10
0
    def test_aws_auth_loop_invalidsaml(self, config_mock, _sleep_mock):
        config_mock().reup = False
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.start_session = mock.MagicMock()
        keyman.start_session.side_effect = aws.InvalidSaml()
        keyman.okta_client = mock.MagicMock()

        ret = keyman.aws_auth_loop()

        assert keyman.start_session.called
        self.assertEqual(ret, 1)
Example #11
0
    def test_auth_okta_duo_mfa_no_factor(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.handle_duo_factor_selection = mock.MagicMock()
        keyman.okta_client.auth.side_effect = [duo.FactorRequired('a', 'b'),
                                               True]
        keyman.okta_client.duo_auth.side_effect = [False, True]
        keyman.user_input = mock.MagicMock()

        keyman.auth_okta()

        keyman.handle_duo_factor_selection.assert_has_calls([mock.call()])
Example #12
0
    def test_start_session(self, aws_mock, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_assertion.return_value = 'assertion'
        aws_mock.Session = mock.MagicMock()

        keyman.start_session()

        keyman.okta_client.assert_has_calls(
            [mock.call.get_assertion(appid=mock.ANY, apptype='amazon_aws')])
        aws_mock.assert_has_calls(
            [mock.call.Session('assertion', profile=mock.ANY)])
Example #13
0
    def test_handle_appid_selection_from_okta_no_aws(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar"])
        keyman.config.accounts = None
        keyman.config.appid = None
        keyman.selector_menu = mock.MagicMock(name="selector_menu")
        keyman.selector_menu.return_value = 0
        keyman.config.set_appid_from_account_id = mock.MagicMock()
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_aws_apps.return_value = []

        with self.assertRaises(NoAWSAccounts):
            keyman.handle_appid_selection(okta_ready=True)
Example #14
0
    def test_aws_auth_loop_profile_error(self, config_mock):
        config_mock().reup = False
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.start_session = mock.MagicMock()
        profile_exc = botocore.exceptions.ProfileNotFound(profile="")
        keyman.start_session.side_effect = profile_exc
        keyman.okta_client = mock.MagicMock()

        ret = keyman.aws_auth_loop()

        assert keyman.start_session.called
        self.assertEqual(ret, 4)
Example #15
0
    def test_auth_okta_duo_mfa_passcode(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = duo.PasscodeRequired('a', 'b')
        keyman.okta_client.duo_auth.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = '000000'

        keyman.auth_okta()

        keyman.okta_client.duo_auth.assert_has_calls([
            mock.call('a', 'b', '000000'),
        ])
Example #16
0
    def test_auth_okta_mfa(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.PasscodeRequired('a', 'b',
                                                                    'c')
        keyman.okta_client.validate_mfa.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "000000"

        keyman.auth_okta()

        keyman.okta_client.validate_mfa.assert_has_calls([
            mock.call('a', 'b', "000000")
        ])
Example #17
0
    def test_auth_okta_duo_mfa_no_factor(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.handle_duo_factor_selection = mock.MagicMock()
        keyman.okta_client.auth.side_effect = [
            duo.FactorRequired("a", "b"),
            True,
        ]
        keyman.okta_client.duo_auth.side_effect = [False, True]
        keyman.user_input = mock.MagicMock()

        keyman.auth_okta()

        keyman.handle_duo_factor_selection.assert_has_calls([mock.call()])
Example #18
0
    def test_auth_okta_answer(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        factor = {'id': 'foo', 'profile': {'questionText': 'a'}}
        keyman.okta_client.auth.side_effect = okta.AnswerRequired(factor, 'b')
        keyman.okta_client.validate_answer.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = 'Someanswer'

        keyman.auth_okta()

        keyman.okta_client.validate_answer.assert_has_calls([
            mock.call('foo', 'b', 'Someanswer'),
        ])
Example #19
0
    def test_auth_okta_duo_mfa_passcode(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = duo.PasscodeRequired("a", "b")
        keyman.okta_client.duo_auth.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "000000"

        keyman.auth_okta()

        keyman.okta_client.duo_auth.assert_has_calls(
            [
                mock.call("a", "b", "000000"),
            ],
        )
Example #20
0
    def test_handle_appid_selection_from_okta(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar"])
        keyman.config.accounts = None
        keyman.config.appid = None
        keyman.selector_menu = mock.MagicMock(name="selector_menu")
        keyman.selector_menu.return_value = 0
        keyman.config.set_appid_from_account_id = mock.MagicMock()
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_aws_apps.return_value = [
            {"name": "myAccount", "appid": "myID"},
        ]

        keyman.handle_appid_selection(okta_ready=True)

        assert keyman.okta_client.get_aws_apps.called
Example #21
0
    def test_handle_appid_selection_from_okta(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar'])
        keyman.config.accounts = None
        keyman.config.appid = None
        keyman.selector_menu = mock.MagicMock(name='selector_menu')
        keyman.selector_menu.return_value = 0
        keyman.config.set_appid_from_account_id = mock.MagicMock()
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_aws_apps.return_value = [
            {'name': 'myAccount', 'appid': 'myID'}
        ]

        keyman.handle_appid_selection(okta_ready=True)

        assert keyman.okta_client.get_aws_apps.called
Example #22
0
    def test_auth_okta_answer(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        factor = {"id": "foo", "profile": {"questionText": "a"}}
        keyman.okta_client.auth.side_effect = okta.AnswerRequired(factor, "b")
        keyman.okta_client.validate_answer.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "Someanswer"

        keyman.auth_okta()

        keyman.okta_client.validate_answer.assert_has_calls(
            [
                mock.call("foo", "b", "Someanswer"),
            ],
        )
Example #23
0
    def test_auth_okta_mfa_retry(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.PasscodeRequired(
            "a",
            "b",
            "c",
        )
        keyman.okta_client.validate_mfa.side_effect = [False, True]
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "000000"

        keyman.auth_okta()

        keyman.okta_client.validate_mfa.assert_has_calls(
            [
                mock.call("a", "b", "000000"),
                mock.call("a", "b", "000000"),
            ],
        )
Example #24
0
    def test_start_session(self, aws_mock, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_assertion.return_value = "assertion"
        aws_mock.Session = mock.MagicMock()

        keyman.start_session()

        keyman.okta_client.assert_has_calls(
            [
                mock.call.get_assertion(appid=mock.ANY),
            ],
        )
        aws_mock.assert_has_calls(
            [
                mock.call.Session(
                    "assertion",
                    profile=mock.ANY,
                    role=None,
                    region=mock.ANY,
                    session_duration=mock.ANY,
                ),
            ],
        )