sources/ldap(minor): save ldap password for user upon successful bind
This commit is contained in:
		@ -142,10 +142,26 @@ class Connector:
 | 
				
			|||||||
        users = User.objects.filter(**filters)
 | 
					        users = User.objects.filter(**filters)
 | 
				
			||||||
        if not users.exists():
 | 
					        if not users.exists():
 | 
				
			||||||
            return None
 | 
					            return None
 | 
				
			||||||
        user = users.first()
 | 
					        user: User = users.first()
 | 
				
			||||||
        if 'distinguishedName' not in user.attributes:
 | 
					        if 'distinguishedName' not in user.attributes:
 | 
				
			||||||
            LOGGER.debug("User doesn't have DN set, assuming not LDAP imported.", user=user)
 | 
					            LOGGER.debug("User doesn't have DN set, assuming not LDAP imported.", user=user)
 | 
				
			||||||
            return None
 | 
					            return None
 | 
				
			||||||
 | 
					        # Either has unusable password,
 | 
				
			||||||
 | 
					        # or has a password, but couldn't be authenticated by ModelBackend.
 | 
				
			||||||
 | 
					        # This means we check with a bind to see if the LDAP password has changed
 | 
				
			||||||
 | 
					        if self.auth_user_by_bind(user, password):
 | 
				
			||||||
 | 
					            # Password given successfully binds to LDAP, so we save it in our Database
 | 
				
			||||||
 | 
					            LOGGER.debug("Updating user's password in DB", user=user)
 | 
				
			||||||
 | 
					            user.set_password(password)
 | 
				
			||||||
 | 
					            user.save()
 | 
				
			||||||
 | 
					            return user
 | 
				
			||||||
 | 
					        # Password doesn't match
 | 
				
			||||||
 | 
					        LOGGER.debug("Failed to bind, password invalid")
 | 
				
			||||||
 | 
					        return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def auth_user_by_bind(self, user: User, password: str) -> Optional[User]:
 | 
				
			||||||
 | 
					        """Attempt authentication by binding to the LDAP server as `user`. This
 | 
				
			||||||
 | 
					        method should be avoided as its slow to do the bind."""
 | 
				
			||||||
        # Try to bind as new user
 | 
					        # Try to bind as new user
 | 
				
			||||||
        LOGGER.debug("Attempting Binding as user", user=user)
 | 
					        LOGGER.debug("Attempting Binding as user", user=user)
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user