[LDAP] editieren von bestehenden rollen.
This commit is contained in:
		
							parent
							
								
									709b4c6aef
								
							
						
					
					
						commit
						c7642758ed
					
				| 
						 | 
				
			
			@ -1,6 +1,8 @@
 | 
			
		|||
"""LDAP Authentication Provider Plugin"""
 | 
			
		||||
 | 
			
		||||
import ssl
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from ldap3.utils.hashed import hashed
 | 
			
		||||
from ldap3 import SUBTREE, MODIFY_REPLACE, MODIFY_ADD, MODIFY_DELETE, HASHED_SALTED_MD5
 | 
			
		||||
from ldap3.core.exceptions import LDAPPasswordIsMandatoryError, LDAPBindError
 | 
			
		||||
| 
						 | 
				
			
			@ -129,13 +131,6 @@ class AuthLDAP(AuthPlugin):
 | 
			
		|||
        )
 | 
			
		||||
        return self.ldap.response()
 | 
			
		||||
 | 
			
		||||
    def _delete_unsed_roles(self):
 | 
			
		||||
        ldap_conn = self.ldap.connect(self.admin_dn, self.admin_secret)
 | 
			
		||||
        ldap_roles = self._get_all_roles(ldap_conn)
 | 
			
		||||
        for role in ldap_roles:
 | 
			
		||||
            if len(role["attributes"]["memberUid"]) == 0:
 | 
			
		||||
                ldap_conn.delete(role["dn"])
 | 
			
		||||
 | 
			
		||||
    def _set_roles(self, user: User):
 | 
			
		||||
        try:
 | 
			
		||||
            ldap_conn = self.ldap.connect(self.admin_dn, self.admin_secret)
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +161,25 @@ class AuthLDAP(AuthPlugin):
 | 
			
		|||
                    modify = {"memberUid": [(MODIFY_DELETE, [user.userid])]}
 | 
			
		||||
                ldap_conn.modify(ldap_role["dn"], modify)
 | 
			
		||||
 | 
			
		||||
            self._delete_unsed_roles()
 | 
			
		||||
        except (LDAPPasswordIsMandatoryError, LDAPBindError):
 | 
			
		||||
            raise BadRequest
 | 
			
		||||
 | 
			
		||||
    def modify_role(self, old_name: str, new_name: Optional[str]):
 | 
			
		||||
        if self.admin_dn is None:
 | 
			
		||||
            logger.error("admin_dn missing in ldap config!")
 | 
			
		||||
            raise InternalServerError
 | 
			
		||||
        try:
 | 
			
		||||
            ldap_conn = self.ldap.connect(self.admin_dn, self.admin_secret)
 | 
			
		||||
            ldap_conn.search(
 | 
			
		||||
                f"ou=group,{self.dn}", f"(cn={old_name})", SUBTREE, attributes=["cn"]
 | 
			
		||||
            )
 | 
			
		||||
            if len(ldap_conn.response) >= 0:
 | 
			
		||||
                dn = ldap_conn.response[0]["dn"]
 | 
			
		||||
                if new_name:
 | 
			
		||||
                    ldap_conn.modify_dn(dn, f"cn={new_name}")
 | 
			
		||||
                else:
 | 
			
		||||
                    ldap_conn.delete(dn)
 | 
			
		||||
 | 
			
		||||
        except (LDAPPasswordIsMandatoryError, LDAPBindError):
 | 
			
		||||
            raise BadRequest
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue