From 537d5c84d5efe27ed76f951ae10f10fd434a15d0 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 11 Jan 2019 01:15:25 +0200 Subject: [PATCH] add class for User LDAP api, tests --- NextCloud.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++ tests/test_ldap.py | 47 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 tests/test_ldap.py diff --git a/NextCloud.py b/NextCloud.py index 479476a..0324d9c 100644 --- a/NextCloud.py +++ b/NextCloud.py @@ -91,6 +91,7 @@ def __init__(self, endpoint, user, password, js=False): "FederatedCloudShare": FederatedCloudShare(requester), "Activity": Activity(requester), "Notifications": Notifications(requester), + "UserLDAP": UserLDAP(requester), } for name, location in PUBLIC_API_NAME_CLASS_MAP.items(): setattr(self, name, getattr(self.functionality[location], name)) @@ -791,6 +792,61 @@ def delete_all_notifications(self): return self.requester.delete() +class UserLDAP(WithRequester): + API_URL = "/ocs/v2.php/apps/user_ldap/api/v1/config" + + @nextcloud_method + def create_ldap_config(self): + """ Create a new and empty LDAP configuration """ + return self.requester.post() + + @nextcloud_method + def get_ldap_config(self, config_id, show_password=None): + """ + Get all keys and values of the specified LDAP configuration + + Args: + config_id (str): User LDAP config id + show_password (int): 0 or 1 whether to return the password in clear text (default 0) + + Returns: + + """ + params = dict(showPassword=show_password) + return self.requester.get(config_id, params=params) + + @nextcloud_method + def edit_ldap_config(self, config_id, data): + """ + Update a configuration with the provided values + + You can find list of all config keys in get_ldap_config method response or in Nextcloud docs + + Args: + config_id (str): User LDAP config id + data (dict): config values to update + + Returns: + + """ + # TODO: refactor to provide methods for configuration s.a. edit_ldap_password and get_ldap_password + prepared_data = {'configData[{}]'.format(key): value for key, value in data.items()} + return self.requester.put(config_id, data=prepared_data) + + @nextcloud_method + def delete_ldap_config(self, config_id): + """ + Delete a given LDAP configuration + + Args: + config_id (str): User LDAP config id + + Returns: + + """ + return self.requester.delete(config_id) + + class OCSCode(enum.IntEnum): OK = 100 SERVER_ERROR = 996 diff --git a/tests/test_ldap.py b/tests/test_ldap.py new file mode 100644 index 0000000..e97f7de --- /dev/null +++ b/tests/test_ldap.py @@ -0,0 +1,47 @@ +from .base import BaseTestCase + + +class TestUserLDAP(BaseTestCase): + + SUCCESS_CODE = 200 + + def setUp(self): + super(TestUserLDAP, self).setUp() + self.nxc.enable_app('user_ldap') + + def test_crud_ldap_config(self): + res = self.nxc.create_ldap_config() + assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE + config_id = res['ocs']['data']['configID'] + + # test get config by id + res = self.nxc.get_ldap_config(config_id) + assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE + config_data = res['ocs']['data'] + + # test edit config + param_to_change = "ldapPagingSize" + old_param_value = config_data[param_to_change] + new_param_value = 777 + assert old_param_value != new_param_value + res = self.nxc.edit_ldap_config(config_id, data={param_to_change: new_param_value}) + assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE + new_config_data = self.nxc.get_ldap_config(config_id)['ocs']['data'] + assert str(new_config_data[param_to_change]) == str(new_param_value) + + # test showPassword param + ldap_password_param = "ldapAgentPassword" + ldap_password_value = "test_password" + self.nxc.edit_ldap_config(config_id, {ldap_password_param: ldap_password_value}) + config_data_without_password = self.nxc.get_ldap_config(config_id)['ocs']['data'] + assert config_data_without_password[ldap_password_param] == "***" + config_data_with_password = self.nxc.get_ldap_config(config_id, show_password=1)['ocs']['data'] + assert config_data_with_password[ldap_password_param] == ldap_password_value + + # test delete config + res = self.nxc.delete_ldap_config(config_id) + assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE + res = self.nxc.get_ldap_config(config_id) + assert res['ocs']['meta']['statuscode'] == self.NOT_FOUND_CODE + +