diff --git a/bin/checkPahekoLdap.py b/bin/checkPahekoLdap.py index 6f0afbe..91574a1 100755 --- a/bin/checkPahekoLdap.py +++ b/bin/checkPahekoLdap.py @@ -64,13 +64,28 @@ def test_mail_secours(paheko_entry, ldap_entry): return False +def test_mails_orga(paheko_entry): + # Vérifie que les mails des orgas sont bien dans le LDAP. + is_orga = paheko_entry["admin_orga"].strip("'") == "Oui" + res = [] + if is_orga: + linked_emails = paheko_entry["emails_rattaches"] + if linked_emails: + for linked_email in linked_emails.splitlines(): + ldap_linked_entry = ldap.get_email(linked_email) + if not ldap_linked_entry: + res.append(linked_email) + return res + with Ldap() as ldap: try: not_in_ldap = [] + not_in_paheko = [] mail_secours = [] quota = [] services = [] + mails_orgas = [] for membre in membres: ldap_entry = ldap.get_email(membre["email"]) if ldap_entry: @@ -88,6 +103,11 @@ with Ldap() as ldap: suffix = " rattachés\n " + "\n ".join(membre['emails_rattaches'].splitlines()) quota.append(f"{membre['email']}: Paheko {membre['quota_disque']}, LDAP mail {ldap_entry[1]['mailQuota'][0].decode()} cloud {ldap_entry[1]['nextcloudQuota'][0].decode()} quotaGlobal {ldap_entry[1]['quota'][0].decode()}{suffix}") + mails_orga = test_mails_orga(membre) + if mails_orga: + suffix = '\n '.join(mails_orga) + mails_orgas.append(f"{membre['email']}:\n {suffix}") + else: not_in_ldap.append(f"{membre['email']} / id : {membre['id']}") except Exception as e: @@ -95,9 +115,24 @@ with Ldap() as ldap: print(ldap.get_email(membre["email"])) raise e + ldap_users = ldap.get_users() + for ldap_user in ldap_users: + ldap_user = ldap_user[1] + paheko_entry = [x for x in membres if x["email"] == ldap_user["mail"][0].decode() or (x["emails_rattaches"] and ldap_user["mail"][0].decode() in x["emails_rattaches"])] + paheko_entry = paheko_entry[0] if len(paheko_entry) else None + if paheko_entry: + pass + else: + not_in_paheko.append(ldap_user["mail"][0].decode()) + + print("Mails dans paheko mais pas dans le LDAP :") print("\n".join(not_in_ldap)) +print("Mails dans lda LDAP mais pas dans paheko :") +print("\n".join(not_in_paheko)) + + print("\nMails de secours pas ok dans le LDAP :") print("\n".join(mail_secours)) @@ -106,3 +141,7 @@ print("\n".join(services)) print("\nQuotas pas ok dans le LDAP :") print("\n".join(quota)) + +print("\nMails d'orga dans paheko mais manquant dans le LDAP :") +print("\n".join(mails_orgas)) + diff --git a/bin/lib/ldap.py b/bin/lib/ldap.py index e04c92f..dfee7e3 100644 --- a/bin/lib/ldap.py +++ b/bin/lib/ldap.py @@ -34,6 +34,15 @@ class Ldap: return result + def get_users(self): + """ + Renvoie tous les utilisateurs. + """ + # Créer une chaîne de filtre pour rechercher dans les champs "cn" et "mailAlias" + result = self.ldap_connection.search_s("ou=users,{}".format(self.ldap_root), ldap.SCOPE_ONELEVEL) + return result + + def delete_user(self, email): """ Supprimer un utilisateur du LDAP par son adresse e-mail