Passed
Pull Request — master (#27)
by
unknown
01:13
created

UserLDAP.edit_ldap_config()   A

Complexity

Conditions 1

Size

Total Lines 15
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 15
rs 10
c 0
b 0
f 0
cc 1
nop 3
1
import re
2
3
from nextcloud.base import WithRequester
4
5
6
class UserLDAP(WithRequester):
7
    API_URL = "/ocs/v2.php/apps/user_ldap/api/v1/config"
8
    SUCCESS_CODE = 200
9
10
    CONFIG_KEYS = [
11
        "ldapHost",
12
        "ldapPort",
13
        "ldapBackupHost",
14
        "ldapBackupPort",
15
        "ldapBase",
16
        "ldapBaseUsers",
17
        "ldapBaseGroups",
18
        "ldapAgentName",
19
        "ldapAgentPassword",
20
        "ldapTLS",
21
        "turnOffCertCheck",
22
        "ldapUserDisplayName",
23
        "ldapGidNumber",
24
        "ldapUserFilterObjectclass",
25
        "ldapUserFilterGroups",
26
        "ldapUserFilter",
27
        "ldapUserFilterMode",
28
        "ldapGroupFilter",
29
        "ldapGroupFilterMode",
30
        "ldapGroupFilterObjectclass",
31
        "ldapGroupFilterGroups",
32
        "ldapGroupMemberAssocAttr",
33
        "ldapGroupDisplayName",
34
        "ldapLoginFilter",
35
        "ldapLoginFilterMode",
36
        "ldapLoginFilterEmail",
37
        "ldapLoginFilterUsername",
38
        "ldapLoginFilterAttributes",
39
        "ldapQuotaAttribute",
40
        "ldapQuotaDefault",
41
        "ldapEmailAttribute",
42
        "ldapCacheTTL",
43
        "ldapUuidUserAttribute",
44
        "ldapUuidGroupAttribute",
45
        "ldapOverrideMainServer",
46
        "ldapConfigurationActive",
47
        "ldapAttributesForUserSearch",
48
        "ldapAttributesForGroupSearch",
49
        "ldapExperiencedAdmin",
50
        "homeFolderNamingRule",
51
        "hasPagedResultSupport",
52
        "hasMemberOfFilterSupport",
53
        "useMemberOfToDetectMembership",
54
        "ldapExpertUsernameAttr",
55
        "ldapExpertUUIDUserAttr",
56
        "ldapExpertUUIDGroupAttr",
57
        "lastJpegPhotoLookup",
58
        "ldapNestedGroups",
59
        "ldapPagingSize",
60
        "turnOnPasswordChange",
61
        "ldapDynamicGroupMemberURL",
62
        "ldapDefaultPPolicyDN",
63
    ]
64
65
    def create_ldap_config(self):
66
        """ Create a new and empty LDAP configuration """
67
        return self.requester.post()
68
69
    def get_ldap_config(self, config_id, show_password=None):
70
        """
71
        Get all keys and values of the specified LDAP configuration
72
73
        Args:
74
            config_id (str): User LDAP config id
75
            show_password (int): 0 or 1 whether to return the password in clear text (default 0)
76
77
        Returns:
78
79
        """
80
        params = dict(showPassword=show_password)
81
        return self.requester.get(config_id, params=params)
82
83
    def edit_ldap_config(self, config_id, data):
84
        """
85
        Update a configuration with the provided values
86
87
        You can find list of all config keys in get_ldap_config method response or in Nextcloud docs
88
89
        Args:
90
            config_id (str): User LDAP config id
91
            data (dict): config values to update
92
93
        Returns:
94
95
        """
96
        prepared_data = {'configData[{}]'.format(key): value for key, value in data.items()}
97
        return self.requester.put(config_id, data=prepared_data)
98
99
    def delete_ldap_config(self, config_id):
100
        """
101
        Delete a given LDAP configuration
102
103
        Args:
104
            config_id (str): User LDAP config id
105
106
        Returns:
107
108
        """
109
        return self.requester.delete(config_id)
110
111
112
for ldap_key in UserLDAP.CONFIG_KEYS:
113
    key_name = re.sub('ldap', '', ldap_key)
114
    key_name = re.sub('([a-z0-9])([A-Z])', r'\1_\2', key_name).lower()
115
116
    # create and add getter method
117
    getter_name = "get_ldap_{}".format(key_name)
118
119
    def getter_method(param):
120
        def getter(self, config_id):
121
            res = self.get_ldap_config(config_id)
122
            data = res.data
123
            return data[param]
124
        getter.__name__ = getter_name
125
        return getter
126
127
    setattr(UserLDAP, getter_name, getter_method(ldap_key))
128
129
    # create and add setter method
130
    setter_name = "set_ldap_{}".format(key_name)
131
132
    def setter_method(param):
133
        def setter(self, config_id, value):
134
            res = self.edit_ldap_config(config_id, data={param: value})
135
            return res
136
        setter.__name__ = setter_name
137
        return setter
138
139
    setattr(UserLDAP, setter_name, setter_method(ldap_key))
140