Ad group attrs in user (eg: mailGroupMember field)
This commit is contained in:
		
							
								
								
									
										80
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								main.py
									
									
									
									
									
								
							@@ -22,10 +22,10 @@ def main():
 | 
			
		||||
def manage_users_extra_fields(ldap_conn: Connection, dolibarr_client: Dolibarrpy):
 | 
			
		||||
    dolibarr_users = dolibarr_client.find_all_users()
 | 
			
		||||
    for dolibarr_user in dolibarr_users:
 | 
			
		||||
        manage_user_extra_fields(ldap_conn, dolibarr_user)
 | 
			
		||||
        manage_user_extra_fields(ldap_conn, dolibarr_user, dolibarr_client)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def manage_user_extra_fields(ldap_conn: Connection, dolibarr_user: dict):
 | 
			
		||||
def manage_user_extra_fields(ldap_conn: Connection, dolibarr_user: dict, dolibarr_client: Dolibarrpy):
 | 
			
		||||
    login = dolibarr_user['login']
 | 
			
		||||
    obj_inetorgperson = ObjectDef(['top', 'inetOrgPerson', 'posixAccount'], ldap_conn)
 | 
			
		||||
    obj_user = ObjectDef(['top', 'inetOrgPerson', 'posixAccount'] + config.LDAP_GROUPS_EXTRA_OBJECT_CLASSES, ldap_conn)
 | 
			
		||||
@@ -56,6 +56,7 @@ def manage_user_extra_fields(ldap_conn: Connection, dolibarr_user: dict):
 | 
			
		||||
        users_writer = Writer.from_cursor(users_reader, object_def=obj_user)
 | 
			
		||||
        ldap_user = users_writer[0]
 | 
			
		||||
    append_extra_fields_to_ldap_user(ldap_user, dolibarr_user)
 | 
			
		||||
    append_extra_group_fields_to_ldap_user(ldap_user, dolibarr_user, dolibarr_client)
 | 
			
		||||
    users_writer.commit()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -65,14 +66,65 @@ 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_attr, ldap_attr = extra_field.split(':')
 | 
			
		||||
        dolibarr_attrs, ldap_attr = extra_field.split(':')
 | 
			
		||||
        dolibarr_attrs = dolibarr_attrs.split('|')
 | 
			
		||||
        values = []
 | 
			
		||||
        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 = value.split() if value else []
 | 
			
		||||
            setattr(ldap_user, ldap_attr, value)
 | 
			
		||||
                values += value
 | 
			
		||||
            else:
 | 
			
		||||
            value = dolibarr_user['array_options'][f'options_{dolibarr_attr}'] or ""
 | 
			
		||||
                value = dolibarr_user['array_options'][f'options_{dolibarr_attr}']
 | 
			
		||||
                if value:
 | 
			
		||||
                    values.append(value)
 | 
			
		||||
        if not values:
 | 
			
		||||
            continue
 | 
			
		||||
        if ldap_attr.endswith('[]'):
 | 
			
		||||
            ldap_attr = ldap_attr[:-2]
 | 
			
		||||
            value = values
 | 
			
		||||
        else:
 | 
			
		||||
            value = values[0]
 | 
			
		||||
        setattr(ldap_user, ldap_attr, value)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def append_extra_group_fields_to_ldap_user(ldap_user: WritableEntry, dolibarr_user: dict, dolibarr_client: Dolibarrpy):
 | 
			
		||||
    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('|')):
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    user_id = dolibarr_user['id']
 | 
			
		||||
    dolibarr_groups: list[dict] = dolibarr_client.get_user_groups_uid(user_id)
 | 
			
		||||
 | 
			
		||||
    for extra_field in config.LDAP_USERS_EXTRA_FIELDS:
 | 
			
		||||
        dolibarr_attrs, ldap_attr = extra_field.split(':')
 | 
			
		||||
        dolibarr_attrs = dolibarr_attrs.split('|')
 | 
			
		||||
        values = []
 | 
			
		||||
        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 = value.split() if value else []
 | 
			
		||||
                    values += value
 | 
			
		||||
                else:
 | 
			
		||||
                    value = dolibarr_group.get(dolibarr_attr, dolibarr_group['array_options'][f'options_{dolibarr_attr}'])
 | 
			
		||||
                    if value:
 | 
			
		||||
                        values.append(value)
 | 
			
		||||
        if not values:
 | 
			
		||||
            continue
 | 
			
		||||
        if ldap_attr.endswith('[]'):
 | 
			
		||||
            ldap_attr = ldap_attr[:-2]
 | 
			
		||||
            value = values
 | 
			
		||||
        else:
 | 
			
		||||
            value = values[0]
 | 
			
		||||
        setattr(ldap_user, ldap_attr, value)
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
@@ -112,14 +164,26 @@ 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_attr, ldap_attr = extra_field.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 = value.split() if value else []
 | 
			
		||||
            setattr(ldap_group, ldap_attr, value)
 | 
			
		||||
                values += value
 | 
			
		||||
            else:
 | 
			
		||||
            value = dolibarr_group['array_options'][f'options_{dolibarr_attr}'] or ""
 | 
			
		||||
                value = dolibarr_group['array_options'][f'options_{dolibarr_attr}']
 | 
			
		||||
                if value:
 | 
			
		||||
                    values.append(value)
 | 
			
		||||
        if not values:
 | 
			
		||||
            continue
 | 
			
		||||
        if ldap_attr.endswith('[]'):
 | 
			
		||||
            ldap_attr = ldap_attr[:-2]
 | 
			
		||||
            value = values
 | 
			
		||||
        else:
 | 
			
		||||
            value = values[0]
 | 
			
		||||
        setattr(ldap_group, ldap_attr, value)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user