예제 #1
0
    def test_add_user(self, app):
        class ConnManager(MockConnectionManager):

            user_id = '8d80d8e1-ffca-4d2e-b755-05f72be1321f'

            def post(self, path, data=None, json=None, request_headers=None):

                headers = {
                    'content-type':
                    'application/json',
                    'location':
                    'admin/realms/test-realm/users/{0}'.format(self.user_id)
                }
                return response(204, None, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager),\
                patch.object(KeyCloakAdminManager, 'add_group_user'),\
                patch.object(KeyCloakAdminManager, 'add_role_mappings'),\
                patch.object(KeyCloakAdminManager, 'check_new_user',
                             return_value=[]):

            auth = KeyCloakAdminManager()
            user_id = auth.add_user(username='******',
                                    password='******',
                                    first_name='test',
                                    last_name='user',
                                    roles=['zm-api-user'])

        assert user_id == ConnManager.user_id
예제 #2
0
    def test_add_custom_user_attributes(self, app):
        class ConnManager(MockConnectionManager):

            user_data = {
                'id': '123456',
                'attributes': {
                    'reset_code': '13579',
                    'reset_code_expires': '000000000'
                }
            }

            def put(self, path, data=None, json=None, request_headers=None):

                assert json == self.user_data
                return response(204, None, None, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            attributes = {
                'reset_code': '13579',
                'reset_code_expires': '000000000'
            }

            auth = KeyCloakAdminManager()
            auth.add_custom_user_attributes('123456', attributes)
예제 #3
0
    def test_get_user(self, app):
        class ConnManager(MockConnectionManager):
            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                user = {
                    'id': '123456',
                    'username': '******',
                    'email': '*****@*****.**',
                    'firstName': 'test',
                    'lastName': 'user',
                    'enabled': True
                }
                return response(200, user, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch.object(KeyCloakAdminManager, 'get_role_mappings',
                             return_value=['zm-api']),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            user = auth.get_user('123456')

        expected = {
            'id': '123456',
            'username': '******',
            'email': '*****@*****.**',
            'full_name': 'test user',
            'given_name': 'test',
            'surname': 'user',
            'active': True,
            'roles': ['zm-api']
        }
        assert user == expected
예제 #4
0
    def test_validate_mobile_reset_password_code(self, app):
        class ConnManager(MockConnectionManager):

            user_data = {
                'id': '123456',
                'username': '******',
                'password': '******',
                'given_name': 'test',
                'surname': 'user',
                'active': True
            }

            def get(self, path, params=None, request_headers=None):

                assert 'code' in params

                headers = {'content-type': 'application/json'}
                return response(200, {'userInfo': self.user_data}, headers,
                                None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            user = auth.validate_mobile_reset_password_code('13579')

            assert user == ConnManager.user_data
예제 #5
0
    def test_delete_user(self, app):
        class ConnManager(MockConnectionManager):
            def delete(self, path, json=None, request_headers=None):

                return response(204, None, None, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            auth.delete_user('123456')
예제 #6
0
    def test_add_group_user(self, app):
        class ConnManager(MockConnectionManager):
            def post(self, path, data=None, json=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(204, None, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            auth.add_group_user(app.config['KEYCLOAK_CLIENT_NAME'], '123456')
예제 #7
0
    def test_get_users_count(self, app):
        class ConnManager(self.ConnManager):
            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(200, str(len(self.ret_val)), headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            count = auth.get_user_count()

        assert count == len(ConnManager.ret_val)
예제 #8
0
    def test_get_role_mappings(self, app):
        class ConnManager(MockConnectionManager):
            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(200, ['zm-api'], headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            roles = auth.get_role_mappings('123456')

        assert roles == ['zm-api']
예제 #9
0
    def test_get_users_offset(self, app):
        class ConnManager(self.ConnManager):
            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(200, self.ret_val[params['first']:], headers,
                                None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            users = auth.get_users(offset=1)

        assert users == [ConnManager.ret_val[1]]
예제 #10
0
    def test_validate_mobile_reset_password_code_invalid(self, app):
        class ConnManager(MockConnectionManager):
            def get(self, path, params=None, request_headers=None):

                assert 'code' in params

                headers = {'content-type': 'application/json'}
                return response(200, {}, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            user = auth.validate_mobile_reset_password_code('13579')

            assert user == {}
예제 #11
0
    def test_get_users_email(self, app):
        class ConnManager(self.ConnManager):
            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(
                    200,
                    [v for v in self.ret_val if v['email'] == params['email']],
                    headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            users = auth.get_users(email='*****@*****.**')

        assert users == [ConnManager.ret_val[1]]
예제 #12
0
    def test_get_roles(self, app):
        class ConnManager(MockConnectionManager):

            roles = [{
                'id': '654321',
                'name': 'zm-api-primary',
                'containerId': 'zm-api'
            }, {
                'id': '754321',
                'name': 'zm-api-secondary',
                'containerId': 'zm-api'
            }, {
                'id': '000001',
                'name': 'uma_authorization',
                'containerId': 'zm-api'
            }]

            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(200, self.roles, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            roles = auth.get_roles()

        expected = {
            '654321': {
                'id': '654321',
                'name': 'zm-api-primary',
                'containerId': '123456'
            },
            '754321': {
                'id': '754321',
                'name': 'zm-api-secondary',
                'containerId': '123456'
            }
        }
        assert roles == expected
예제 #13
0
    def test_get_reset_password_code(self, app):
        class ConnManager(MockConnectionManager):

            code = {'code': '13579'}

            def get(self, path, params=None, request_headers=None):

                assert 'user_id' in params

                headers = {'content-type': 'application/json'}
                return response(200, self.code, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            code = auth.get_reset_password_code('123456')

            assert code == ConnManager.code
예제 #14
0
    def test_update_password(self, app):
        class ConnManager(MockConnectionManager):

            credentials = {
                'type': 'password',
                'value': 'password',
                'temporary': False
            }

            def put(self, path, data=None, json=None, request_headers=None):

                assert json == self.credentials
                return response(204, None, None, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            auth.update_password('123456', 'password')
예제 #15
0
    def test_remove_role_mappings(self, app):
        class ConnManager(MockConnectionManager):

            roles = {
                '13579': {
                    'id': '13579',
                    'name': 'zm-api-user',
                    'containerId': '345678'
                }
            }

            def delete(self, path, json=None, request_headers=None):

                assert json == self.roles.values()
                return response(204, None, None, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager),\
                patch.object(KeyCloakAdminManager, 'get_roles',
                             return_value=ConnManager.roles):

            auth = KeyCloakAdminManager()
            auth.remove_role_mappings('123456', {'13579'})
예제 #16
0
    def test_add_role_mappings(self, app):

        roles = {
            '123456': {
                'id': '123456',
                'name': 'zm-api-user',
                'containerId': 'zm-api'
            }
        }

        class ConnManager(MockConnectionManager):
            def post(self, path, data=None, json=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(204, None, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager),\
                patch.object(KeyCloakAdminManager, 'get_roles',
                             return_value=roles):

            auth = KeyCloakAdminManager()
            auth.add_role_mappings('23456', ['zm-api-user'])
예제 #17
0
    def test_check_new_user(self, app):
        class ConnManager(MockConnectionManager):

            user_data = [{
                'username': '******',
                'email': '*****@*****.**',
                'firstName': 'user',
                'lastName': 'test',
                'id': '8d80d8e1-ffca-4d2e-b755-05f72be1321f'
            }]

            def get(self, path, params=None, request_headers=None):

                headers = {'content-type': 'application/json'}
                return response(200, self.user_data, headers, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager):

            auth = KeyCloakAdminManager()
            users = auth.check_new_user('*****@*****.**')

        assert users == ConnManager.user_data
예제 #18
0
    def test_update_user(self, app):

        role_mappings = [{
            'id': '13579',
            'name': 'zm-api-user-primary',
            'containerId': '123456'
        }, {
            'id': '13580',
            'name': 'zm-api-user-secondary',
            'containerId': '123456'
        }]

        class ConnManager(MockConnectionManager):

            user_data = {
                'username':
                '******',
                'email':
                '*****@*****.**',
                'firstName':
                'test',
                'lastName':
                'user',
                'enabled':
                True,
                'credentials': [{
                    'type': 'password',
                    'value': 'password',
                    'temporary': False
                }]
            }

            def put(self, path, data=None, json=None, request_headers=None):

                assert json == self.user_data
                return response(204, None, None, None, 5)

        with patch('flask_rho_keycloak.admin.ConnectionManager', ConnManager),\
                patch('flask_rho_keycloak.admin.KeyCloakAuthManager',
                      MockKeyCloakAuthManager),\
                patch.object(KeyCloakAdminManager, 'get_role_mappings',
                             return_value=role_mappings),\
                patch.object(KeyCloakAdminManager, 'remove_role_mappings',
                             return_value=None),\
                patch.object(KeyCloakAdminManager, 'add_role_mappings',
                             return_value=None):

            user_data = {
                'id': '123456',
                'username': '******',
                'password': '******',
                'given_name': 'test',
                'surname': 'user',
                'active': True
            }

            auth = KeyCloakAdminManager()
            user_id = auth.update_user(user_data)
            assert user_id == user_data['id']

            user_id = auth.update_user(user_data, ['13579'])
            assert user_id == user_data['id']