From f2e94d53fc8fdee21e8c01036fe5f847524dc926 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Wed, 19 Feb 2025 22:36:06 +0100 Subject: [PATCH] Add concatenate feature + use constants --- main.py | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index d0b0db6..2604b23 100755 --- a/main.py +++ b/main.py @@ -72,26 +72,29 @@ def append_extra_fields_to_ldap_user(ldap_user: WritableEntry, dolibarr_user: di ldap_user.objectClass += extra_object_class for extra_field in config.LDAP_USERS_EXTRA_FIELDS: - dolibarr_attrs, ldap_attr = extra_field.split(':') - dolibarr_attrs = dolibarr_attrs.split('|') + dolibarr_attrs, ldap_attr = extra_field.split('::') + dolibarr_attrs = dolibarr_attrs.split('+') values = [] + if dolibarr_attrs[0].startswith('GROUP__'): + continue for dolibarr_attr in dolibarr_attrs: - if dolibarr_attr.startswith('GROUP__'): - continue if dolibarr_attr.endswith('[]'): dolibarr_attr = dolibarr_attr[:-2] - value = dolibarr_user['array_options'][f'options_{dolibarr_attr}'] + value = dolibarr_user.get(dolibarr_attr, None) or dolibarr_user['array_options'][f'options_{dolibarr_attr}'] value = value.split() if value else [] values += value else: - value = dolibarr_user['array_options'][f'options_{dolibarr_attr}'] + if dolibarr_attr.startswith("'") and dolibarr_attr.endswith("'"): + value = dolibarr_attr[1:-1] + else: + value = dolibarr_user.get(dolibarr_attr, None) or dolibarr_user['array_options'][f'options_{dolibarr_attr}'] if value: values.append(value) if ldap_attr.endswith('[]'): ldap_attr = ldap_attr[:-2] value = values else: - value = values[0] if values else "" + value = "".join(map(str, values)) setattr(ldap_user, ldap_attr, value) @@ -99,7 +102,7 @@ def append_extra_group_fields_to_ldap_user(ldap_user: WritableEntry, dolibarr_us oldgroupid: int | None = None, newgroupid: int | None = None, new_group: dict | None = None): if not any(dolibarr_attr.startswith('GROUP') for extra_field in config.LDAP_USERS_EXTRA_FIELDS - for dolibarr_attr in extra_field.split(':')[0].split('|')): + for dolibarr_attr in extra_field.split('::')[0].split('|')): return user_id = dolibarr_user['id'] @@ -117,28 +120,29 @@ def append_extra_group_fields_to_ldap_user(ldap_user: WritableEntry, dolibarr_us return for extra_field in config.LDAP_USERS_EXTRA_FIELDS: - dolibarr_attrs, ldap_attr = extra_field.split(':') - dolibarr_attrs = dolibarr_attrs.split('|') + dolibarr_attrs, ldap_attr = extra_field.split('::') + dolibarr_attrs = dolibarr_attrs.split('+') values = [] + if not dolibarr_attrs[0].startswith('GROUP__'): + continue for dolibarr_attr in dolibarr_attrs: - if not dolibarr_attr.startswith('GROUP__'): - continue dolibarr_attr = dolibarr_attr[7:] for dolibarr_group in dolibarr_groups: if dolibarr_attr.endswith('[]'): dolibarr_attr = dolibarr_attr[:-2] - value = dolibarr_group.get(dolibarr_attr, dolibarr_group['array_options'][f'options_{dolibarr_attr}']) + value = dolibarr_group.get(dolibarr_attr, None) or dolibarr_group['array_options'][f'options_{dolibarr_attr}'] value = value.split() if value else [] values += value else: - value = dolibarr_group.get(dolibarr_attr, dolibarr_group['array_options'][f'options_{dolibarr_attr}']) + value = dolibarr_group.get(dolibarr_attr, None) or dolibarr_group['array_options'][f'options_{dolibarr_attr}'] if value: values.append(value) + break # Don't concatenate the value for multiple groups if ldap_attr.endswith('[]'): ldap_attr = ldap_attr[:-2] value = values else: - value = values[0] if values else "" + value = "".join(map(str, values)) setattr(ldap_user, ldap_attr, value) @@ -178,24 +182,27 @@ def append_extra_fields_to_ldap_group(ldap_group: WritableEntry, dolibarr_group: ldap_group.objectClass += extra_object_class for extra_field in config.LDAP_GROUPS_EXTRA_FIELDS: - dolibarr_attrs, ldap_attr = extra_field.split(':') - dolibarr_attrs = dolibarr_attrs.split('|') + dolibarr_attrs, ldap_attr = extra_field.split('::') + dolibarr_attrs = dolibarr_attrs.split('+') values = [] for dolibarr_attr in dolibarr_attrs: if dolibarr_attr.endswith('[]'): dolibarr_attr = dolibarr_attr[:-2] - value = dolibarr_group['array_options'][f'options_{dolibarr_attr}'] + value = dolibarr_group.get(dolibarr_attr, None) or dolibarr_group['array_options'][f'options_{dolibarr_attr}'] value = value.split() if value else [] values += value else: - value = dolibarr_group['array_options'][f'options_{dolibarr_attr}'] + if dolibarr_attr.startswith("'") and dolibarr_attr.endswith("'"): + value = dolibarr_attr[1:-1] + else: + value = dolibarr_group.get(dolibarr_attr, None) or dolibarr_group['array_options'][f'options_{dolibarr_attr}'] if value: values.append(value) if ldap_attr.endswith('[]'): ldap_attr = ldap_attr[:-2] value = values else: - value = values[0] if values else "" + value = "".join(map(str, values)) setattr(ldap_group, ldap_attr, value)