From 3b5c1045a31f35c186b3b671e95ede2f7a54e56e Mon Sep 17 00:00:00 2001 From: Marcos Pereira Date: Thu, 14 Dec 2017 14:13:09 -0200 Subject: [PATCH 1/2] Updated python-jose. --- docs/source/conf.py | 4 ++-- requirements.txt | 2 +- setup.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1e7cf48..c8f9890 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -60,9 +60,9 @@ author = 'Marcos Pereira' # built documents. # # The short X.Y version. -version = '0.11.0' +version = '0.11.1' # The full version, including alpha/beta/rc tags. -release = '0.11.0' +release = '0.11.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/requirements.txt b/requirements.txt index 61caa61..d6eafdf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.18.4 httmock==1.2.5 -python-jose==1.3.2 +python-jose==1.4.0 diff --git a/setup.py b/setup.py index 7746d82..e3c8d2d 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from setuptools import setup setup( name='python-keycloak', - version='0.11.0', + version='0.11.1', url='https://bitbucket.org/agriness/python-keycloak', license='GNU General Public License - V3', author='Marcos Pereira', @@ -12,7 +12,7 @@ setup( keywords='keycloak openid', description=u'python-keycloak is a Python package providing access to the Keycloak API.', packages=['keycloak', 'keycloak.authorization', 'keycloak.tests'], - install_requires=['requests==2.18.4', 'httmock==1.2.5', 'python-jose==1.3.2', 'simplejson'], + install_requires=['requests==2.18.4', 'httmock==1.2.5', 'python-jose==1.4.0'], classifiers=[ 'Programming Language :: Python :: 3', 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', From 2e1c625376c2d27c00bc42cd9f9b9208dfa582b1 Mon Sep 17 00:00:00 2001 From: Alex Zeleznikov Date: Thu, 4 Jan 2018 10:21:40 +0200 Subject: [PATCH 2/2] Add sync users function --- keycloak/keycloak_admin.py | 11 ++++++++++- keycloak/urls_patterns.py | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/keycloak/keycloak_admin.py b/keycloak/keycloak_admin.py index 6c9e32b..1de4fdf 100644 --- a/keycloak/keycloak_admin.py +++ b/keycloak/keycloak_admin.py @@ -17,7 +17,8 @@ from .urls_patterns import URL_ADMIN_USERS_COUNT, URL_ADMIN_USER, URL_ADMIN_USER_CONSENTS, \ URL_ADMIN_SEND_UPDATE_ACCOUNT, URL_ADMIN_RESET_PASSWORD, URL_ADMIN_SEND_VERIFY_EMAIL, URL_ADMIN_GET_SESSIONS, \ - URL_ADMIN_SERVER_INFO, URL_ADMIN_CLIENTS, URL_ADMIN_CLIENT, URL_ADMIN_CLIENT_ROLES, URL_ADMIN_REALM_ROLES, URL_ADMIN_USER_CLIENT_ROLES + URL_ADMIN_SERVER_INFO, URL_ADMIN_CLIENTS, URL_ADMIN_CLIENT, URL_ADMIN_CLIENT_ROLES, URL_ADMIN_REALM_ROLES, \ + URL_ADMIN_USER_CLIENT_ROLES, URL_ADMIN_USER_STORAGE from .keycloak_openid import KeycloakOpenID from .exceptions import raise_error_from_response, KeycloakGetError @@ -458,3 +459,11 @@ class KeycloakAdmin: data_raw = self.connection.raw_post(URL_ADMIN_USER_CLIENT_ROLES.format(**params_path), data=json.dumps(payload)) return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def sync_users(self, storage_id, action): + data = {'action': action} + params_path = {"realm-name": self.realm_name, "id": storage_id} + params_query = {"action": action} + data_raw = self.connection.raw_post(URL_ADMIN_USER_STORAGE.format(**params_path), + data=json.dumps(data), **params_query) + return raise_error_from_response(data_raw, KeycloakGetError) diff --git a/keycloak/urls_patterns.py b/keycloak/urls_patterns.py index 33c04e9..24e9a59 100644 --- a/keycloak/urls_patterns.py +++ b/keycloak/urls_patterns.py @@ -42,3 +42,5 @@ URL_ADMIN_CLIENT = "admin/realms/{realm-name}/clients/{id}" URL_ADMIN_CLIENT_ROLES = "admin/realms/{realm-name}/clients/{id}/roles" URL_ADMIN_REALM_ROLES = "admin/realms/{realm-name}/roles" + +URL_ADMIN_USER_STORAGE = "admin/realms/{realm-name}/user-storage/{id}/sync"