Add concatenate feature + use constants

This commit is contained in:
Emmy D'Anello 2025-02-19 22:36:06 +01:00
parent 27f3145857
commit f2e94d53fc
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85

47
main.py
View File

@ -72,26 +72,29 @@ def append_extra_fields_to_ldap_user(ldap_user: WritableEntry, dolibarr_user: di
ldap_user.objectClass += extra_object_class ldap_user.objectClass += extra_object_class
for extra_field in config.LDAP_USERS_EXTRA_FIELDS: for extra_field in config.LDAP_USERS_EXTRA_FIELDS:
dolibarr_attrs, ldap_attr = extra_field.split(':') dolibarr_attrs, ldap_attr = extra_field.split('::')
dolibarr_attrs = dolibarr_attrs.split('|') dolibarr_attrs = dolibarr_attrs.split('+')
values = [] values = []
for dolibarr_attr in dolibarr_attrs: if dolibarr_attrs[0].startswith('GROUP__'):
if dolibarr_attr.startswith('GROUP__'):
continue continue
for dolibarr_attr in dolibarr_attrs:
if dolibarr_attr.endswith('[]'): if dolibarr_attr.endswith('[]'):
dolibarr_attr = dolibarr_attr[:-2] 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 [] value = value.split() if value else []
values += value values += value
else: 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: if value:
values.append(value) values.append(value)
if ldap_attr.endswith('[]'): if ldap_attr.endswith('[]'):
ldap_attr = ldap_attr[:-2] ldap_attr = ldap_attr[:-2]
value = values value = values
else: else:
value = values[0] if values else "" value = "".join(map(str, values))
setattr(ldap_user, ldap_attr, value) 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): oldgroupid: int | None = None, newgroupid: int | None = None, new_group: dict | None = None):
if not any(dolibarr_attr.startswith('GROUP') if not any(dolibarr_attr.startswith('GROUP')
for extra_field in config.LDAP_USERS_EXTRA_FIELDS 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 return
user_id = dolibarr_user['id'] user_id = dolibarr_user['id']
@ -117,28 +120,29 @@ def append_extra_group_fields_to_ldap_user(ldap_user: WritableEntry, dolibarr_us
return return
for extra_field in config.LDAP_USERS_EXTRA_FIELDS: for extra_field in config.LDAP_USERS_EXTRA_FIELDS:
dolibarr_attrs, ldap_attr = extra_field.split(':') dolibarr_attrs, ldap_attr = extra_field.split('::')
dolibarr_attrs = dolibarr_attrs.split('|') dolibarr_attrs = dolibarr_attrs.split('+')
values = [] values = []
for dolibarr_attr in dolibarr_attrs: if not dolibarr_attrs[0].startswith('GROUP__'):
if not dolibarr_attr.startswith('GROUP__'):
continue continue
for dolibarr_attr in dolibarr_attrs:
dolibarr_attr = dolibarr_attr[7:] dolibarr_attr = dolibarr_attr[7:]
for dolibarr_group in dolibarr_groups: for dolibarr_group in dolibarr_groups:
if dolibarr_attr.endswith('[]'): if dolibarr_attr.endswith('[]'):
dolibarr_attr = dolibarr_attr[:-2] 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 [] value = value.split() if value else []
values += value values += value
else: 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: if value:
values.append(value) values.append(value)
break # Don't concatenate the value for multiple groups
if ldap_attr.endswith('[]'): if ldap_attr.endswith('[]'):
ldap_attr = ldap_attr[:-2] ldap_attr = ldap_attr[:-2]
value = values value = values
else: else:
value = values[0] if values else "" value = "".join(map(str, values))
setattr(ldap_user, ldap_attr, value) 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 ldap_group.objectClass += extra_object_class
for extra_field in config.LDAP_GROUPS_EXTRA_FIELDS: for extra_field in config.LDAP_GROUPS_EXTRA_FIELDS:
dolibarr_attrs, ldap_attr = extra_field.split(':') dolibarr_attrs, ldap_attr = extra_field.split('::')
dolibarr_attrs = dolibarr_attrs.split('|') dolibarr_attrs = dolibarr_attrs.split('+')
values = [] values = []
for dolibarr_attr in dolibarr_attrs: for dolibarr_attr in dolibarr_attrs:
if dolibarr_attr.endswith('[]'): if dolibarr_attr.endswith('[]'):
dolibarr_attr = dolibarr_attr[:-2] 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 [] value = value.split() if value else []
values += value values += value
else: 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: if value:
values.append(value) values.append(value)
if ldap_attr.endswith('[]'): if ldap_attr.endswith('[]'):
ldap_attr = ldap_attr[:-2] ldap_attr = ldap_attr[:-2]
value = values value = values
else: else:
value = values[0] if values else "" value = "".join(map(str, values))
setattr(ldap_group, ldap_attr, value) setattr(ldap_group, ldap_attr, value)