Passed
Push — master ( 0e3ad4...9ffed3 )
by Matěj
01:17
created

NextCloud.api_wrappers.user_ldap.setter_method()   A

Complexity

Conditions 1

Size

Total Lines 6
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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