Beispiel #1
0
 def remove(config, username, filename, force):
     """Remove user's SSH public key from their LDAP entry."""
     client = Client()
     client.prepare_connection()
     user_api = UserApi(client)
     key_api = API(client)
     key_api.remove(username, user_api, filename, force)
Beispiel #2
0
            def it_finds_a_user(mocker):  # noqa: F811
                mocker.patch(
                    'ldap_tools.client.Client.search', return_value=['foo'])
                mocker.patch(
                    'ldap_tools.client.Client.prepare_connection',
                    return_value=None)

                user_api = UserApi(client)
                user_api.find(username)

                ldap_tools.client.Client.search.assert_called_once_with(
                    ['(uid={})'.format(username)])
Beispiel #3
0
            def it_passes_the_correct_filter(mocker):  # noqa: F811
                mocker.patch(
                    'ldap_tools.client.Client.search', return_value=None)
                mocker.patch(
                    'ldap_tools.client.Client.prepare_connection',
                    return_value=None)

                user_api = UserApi(client)
                user_api.index()

                ldap_tools.client.Client.search.assert_called_once_with(
                    ["(objectclass=posixAccount)"])
Beispiel #4
0
            def it_finds_no_users(mocker):  # noqa: F811
                mocker.patch(
                    'ldap_tools.client.Client.search', return_value=[])
                mocker.patch(
                    'ldap_tools.client.Client.prepare_connection',
                    return_value=None)

                user_api = UserApi(client)

                with pytest.raises(
                        ldap_tools.exceptions.NoUserFound,
                        message="User ({}) not found"):
                    user_api.find(username)
Beispiel #5
0
 def add(config, username, filename):
     """Add user's SSH public key to their LDAP entry."""
     try:
         client = Client()
         client.prepare_connection()
         user_api = UserApi(client)
         key_api = API(client)
         key_api.add(username, user_api, filename)
     except (ldap3.core.exceptions.LDAPNoSuchAttributeResult,
             ldap_tools.exceptions.InvalidResult,
             ldap3.core.exceptions.LDAPAttributeOrValueExistsResult
             ) as err:  # pragma: no cover
         print('{}: {}'.format(type(err), err.args[0]))
     except Exception as err:  # pragma: no cover
         raise err from None
Beispiel #6
0
            def it_assembles_the_current_username(mocker):  # noqa: F811
                client.add = MagicMock()

                user_api = UserApi(client)
                # mock private method __ldap_attr, so we don't have to manage
                # a giant dict that requires mocking many private methods
                client.basedn = 'dc=test,dc=org'
                mocker.patch.object(
                    user_api, '_API__ldap_attr', return_value=ldap_attributes)

                user_api.create(first_name, last_name, group_name, user_type,
                                group_api)
                user_api.ldap_attr = ldap_attributes

                assert user_api.username == 'test.user'
Beispiel #7
0
            def it_passes_the_correct_filter(mocker):  # noqa: F811
                mocker.patch(
                    'ldap_tools.client.Client.search', return_value=None)
                mocker.patch(
                    'ldap_tools.client.Client.prepare_connection',
                    return_value=None)

                user_api = UserApi(client)
                user_api.show(username)

                filter = [
                    '(objectclass=posixAccount)', "(uid={})".format(username)
                ]

                ldap_tools.client.Client.search.assert_called_once_with(filter)
Beispiel #8
0
            def it_finds_two_users(mocker):  # noqa: F811
                mocker.patch(
                    'ldap_tools.client.Client.search',
                    return_value=['foo', 'bar'])
                mocker.patch(
                    'ldap_tools.client.Client.prepare_connection',
                    return_value=None)

                user_api = UserApi(client)

                with pytest.raises(
                        ldap_tools.exceptions.TooManyResults,
                        message=(
                            "Multiple users found. Please narrow your search."
                        )):
                    user_api.find(username)
Beispiel #9
0
            def it_uses_the_correct_distinguished_name(mocker):  # noqa: F811
                mocker.patch(
                    'ldap_tools.client.Client.delete', return_value=None)
                mocker.patch(
                    'ldap_tools.client.Client.load_ldap_config',
                    return_value=None)
                mocker.patch(
                    'ldap_tools.client.Client.prepare_connection',
                    return_value=None)

                ldap_tools.client.Client.basedn = 'dc=test,dc=org'

                user_api = UserApi(client)
                user_api.delete(username, user_type)

                ldap_tools.client.Client.delete.assert_called_once_with(
                    'uid=test.user,ou=People,dc=test,dc=org')
Beispiel #10
0
        def it_removes_key_from_user(mocker):  # noqa: F811
            pytest.xfail(reason='Need to learn how to mock user.entry_dn')
            client.modify = MagicMock()
            client.search = MagicMock()
            user_api = UserApi(client)
            user_api.find = MagicMock(return_value=ldap_entry)
            key_api = KeyApi(client)

            with open(path.join(fixture_path, 'two_key_user'),
                      'r') as FILE:  # get current keys
                mocker.patch.object(key_api,
                                    '_API__current_keys',
                                    return_value=FILE.read().splitlines())

            filename = path.join(fixture_path, 'delete_user_key')

            key_api.remove(username, user_api, filename, True)
            client.modify.assert_called_once_with(distinguished_name, mock.ANY)
Beispiel #11
0
            def it_calls_the_client(mocker):  # noqa: F811
                client.add = MagicMock()

                user_api = UserApi(client)
                # mock private method __ldap_attr, so we don't have to manage
                # a giant dict that requires mocking many private methods
                client.basedn = 'dc=test,dc=org'
                mocker.patch.object(
                    user_api, '_API__ldap_attr', return_value=ldap_attributes)
                mocker.patch.object(
                    UserApi,
                    '_API__object_class',
                    return_value='inetOrgPerson')

                user_api.create(first_name, last_name, group_name, user_type,
                                group_api)
                user_api.ldap_attr = ldap_attributes

                client.add.assert_called_once_with(
                    'uid=test.user,ou=People,dc=test,dc=org', 'inetOrgPerson',
                    ldap_attributes)
Beispiel #12
0
        def describe_key_addition():
            client.modify = MagicMock()
            user_api = UserApi(client)
            user_api.find = MagicMock(return_value=ldap_entry)
            key_api = KeyApi(client)

            def it_calls_the_client():
                pytest.xfail(reason='Need to learn how to mock user.entry_dn')
                client.modify.reset_mock()
                filename = path.join(fixture_path, 'single_key_user')
                key_api.add(username, user_api, filename)
                client.modify.assert_called_once_with(distinguished_name,
                                                      mock.ANY)

            def it_raises_error_on_bad_key():
                pytest.xfail(reason='Need to learn how to mock user.entry_dn')
                filename = path.join(fixture_path, 'invalid_user_key')

                with pytest.raises(sshpubkeys.exceptions.MalformedDataError):
                    key_api.add(username, user_api, filename)

            def it_raises_error_on_bad_object():
                pytest.xfail(reason='Need to learn how to mock user.entry_dn')
                filename = path.join(fixture_path, 'single_key_user')
                ldap_entry = [[
                    distinguished_name, {
                        'objectClass': [
                            b'top', b'posixAccount', b'shadowAccount',
                            b'inetOrgPerson', b'organizationalPerson',
                            b'person'
                        ]
                    }
                ]]
                user_api.find = MagicMock(return_value=ldap_entry)

                with pytest.raises(
                        ldap3.core.exceptions.LDAPNoSuchAttributeResult):
                    key_api.add(username, user_api, filename)