aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2025-07-16 10:13:34 +0100
committerGravatar Joe Banks <[email protected]>2025-07-16 10:13:34 +0100
commit613e6a90ef9e8266b431dfee5feab3ec1ff857f9 (patch)
tree686781c0faee5ead94ce2bf54439339d9af677ed
parentMove common variables for GitHub API into common file (diff)
Handle users who have left in the LDAP sync utility
-rw-r--r--arthur/exts/directory/ldap.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/arthur/exts/directory/ldap.py b/arthur/exts/directory/ldap.py
index 72cb460..f2feb9e 100644
--- a/arthur/exts/directory/ldap.py
+++ b/arthur/exts/directory/ldap.py
@@ -194,8 +194,13 @@ class LDAP(commands.Cog):
notified_users.append(message.mentions[0])
+ handled = set()
+
for user in diff:
await self._process_user(user, notified_users)
+ handled.add(user.discord_user.id)
+
+ self._handle_left_users(handled)
logger.info("LDAP: Sync complete.")
except Exception as e: # noqa: BLE001
@@ -204,6 +209,21 @@ class LDAP(commands.Cog):
f":x: LDAP Sync Error: ```python\n{e}```"
)
+ def _handle_left_users(self, handled: list[int]) -> None:
+ """Handle users that have left the guild and so were not processed."""
+ ldap_users = ldap.find_users()
+
+ for user in ldap_users:
+ if user.employee_number is None or user.employee_number in handled:
+ continue
+
+ if user.locked:
+ logger.info(f"LDAP: User {user.uid} is locked, skipping.")
+ continue
+
+ logger.info(f"LDAP: Deactivating user {user.uid} as they are no longer in the guild.")
+ freeipa.deactivate_user(user.uid)
+
async def _process_user(self, user: DiffedUser, notified_users: list[discord.User]) -> None:
if user.action == LDAPSyncAction.ADD:
if user.discord_user in notified_users: