Skip to content

Commit 613e6a9

Browse files
committed
Handle users who have left in the LDAP sync utility
1 parent bf4cb2c commit 613e6a9

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

arthur/exts/directory/ldap.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,13 @@ async def sync_users(self) -> None:
194194

195195
notified_users.append(message.mentions[0])
196196

197+
handled = set()
198+
197199
for user in diff:
198200
await self._process_user(user, notified_users)
201+
handled.add(user.discord_user.id)
202+
203+
self._handle_left_users(handled)
199204

200205
logger.info("LDAP: Sync complete.")
201206
except Exception as e: # noqa: BLE001
@@ -204,6 +209,21 @@ async def sync_users(self) -> None:
204209
f":x: LDAP Sync Error: ```python\n{e}```"
205210
)
206211

212+
def _handle_left_users(self, handled: list[int]) -> None:
213+
"""Handle users that have left the guild and so were not processed."""
214+
ldap_users = ldap.find_users()
215+
216+
for user in ldap_users:
217+
if user.employee_number is None or user.employee_number in handled:
218+
continue
219+
220+
if user.locked:
221+
logger.info(f"LDAP: User {user.uid} is locked, skipping.")
222+
continue
223+
224+
logger.info(f"LDAP: Deactivating user {user.uid} as they are no longer in the guild.")
225+
freeipa.deactivate_user(user.uid)
226+
207227
async def _process_user(self, user: DiffedUser, notified_users: list[discord.User]) -> None:
208228
if user.action == LDAPSyncAction.ADD:
209229
if user.discord_user in notified_users:

0 commit comments

Comments
 (0)