diff --git a/bin/checkPahekoLdap.py b/bin/checkPahekoLdap.py index aecee5a..b48e35b 100755 --- a/bin/checkPahekoLdap.py +++ b/bin/checkPahekoLdap.py @@ -42,9 +42,15 @@ def test_quota(paheko_entry, ldap_entry): is_orga = paheko_entry["admin_orga"].strip("'") == "Oui" has_mail = ldap_entry[1]['mailEnabled'][0] == b"TRUE" has_nextcloud = ldap_entry[1]['nextcloudEnabled'][0] == b"TRUE" + email = ldap_entry[1]["mail"][0].decode() + res = "" if quota_paheko != quota_global: - return False + #print(f"{email}: bad quota Paheko/LDAP") + #ldap.update_user(email, "quota", str(quota_paheko).encode()) + return "Quota paheko et ldap non égaux" + + quota_allowed = quota_paheko + 1 # 1GB pour email quota_given = 0 if has_mail: @@ -52,23 +58,67 @@ def test_quota(paheko_entry, ldap_entry): if has_nextcloud: quota_given += quota_nextcloud + # if quota_mail > 1: + # localpart, domain = email.split('@',1) + # path = f"/var/lib/docker/volumes/postfix_mailData/_data/{domain}/{localpart}" + # size = get_disk_size(path) + # print(f"email space: {email} {size}") + # # if size < 973741824: + # # print(f"{email} {size}") + # # ldap.update_user(email, "mailQuota", b"1G") + + if is_orga: linked_emails = paheko_entry["emails_rattaches"] if linked_emails: for linked_email in linked_emails.splitlines(): + quota_allowed += 1 # 1GB par email rattaché ldap_linked_entry = ldap.get_email(linked_email) if ldap_linked_entry: quota_given += int(ldap_linked_entry[0][1]['mailQuota'][0][:-1]) # beaucoup ont en fait xGO de mail et xGO de cloud pour xGO en tout, à corriger à terme. - if quota_global * 2 == quota_given or 1 + quota_global * 2 == quota_given: - return True + # if quota_global * 2 == quota_given or 1 + quota_global * 2 == quota_given: + # return True # On laisse 1GO de rab' pour tous ceux qui ont 10 de cloud et 1 de mail. - if quota_given <= quota_global + 1: - return True + #if quota_given <= quota_global + 1: + # return True - return False + # Si cloud dédié, aller chercher la place utilisée sur le cloud dédié ! + wordpress + if is_orga and (paheko_entry["cloud"].strip("'") == "Oui"): + serveur_prod = paheko_entry["serveur_prod"] + if not serveur_prod: + return "Pas de serveur prod renseigné" + directory = f"/var/lib/docker/volumes/orga_{paheko_entry['nom_orga'].lower()}-cloudData" + with Ssh(serveur_prod) as ssh: + try: + nc_size = int(ssh.check_output(f"du -sm {directory} | cut -f1")) + # print(f"NC {paheko_entry['nom_orga']} - {nc_size}") + quota_given += nc_size // 1024 + res += f", NC: {nc_size}Mo" + except ValueError: + return "erreur taille NC" + + if is_orga and (paheko_entry["wordpress"].strip("'") == "Oui"): + serveur_prod = paheko_entry["serveur_prod"] + if not serveur_prod: + return "Pas de serveur prod renseigné" + directory = f"/var/lib/docker/volumes/orga_{paheko_entry['nom_orga'].lower()}-wordpress/_data/wp-content" + with Ssh(serveur_prod) as ssh: + try: + wp_size = int(ssh.check_output(f"du -sm {directory} | cut -f1")) + # print(f"WP {paheko_entry['nom_orga']} - {wp_size}") + quota_given += wp_size // 1024 + res += f", WP: {wp_size}Mo" + except ValueError: + return "erreur taille WP" + + if quota_given > quota_allowed: + # print(f"{ldap_entry[1]['mail'][0].decode()}: {quota_given}/{quota_allowed}") + res += f" -> utilise {quota_given} (max {quota_allowed})" + print(f"{email}: {res}") + return res def test_mail_secours(paheko_entry, ldap_entry): @@ -100,7 +150,7 @@ def test_server_location(paheko_entry): serveur_prod = paheko_entry["serveur_prod"] if not serveur_prod: return False - directory = f"/kaz/dockers/{paheko_entry['nom_orga']}-orga" + directory = f"/kaz/dockers/{paheko_entry['nom_orga'].lower()}-orga" with Ssh(serveur_prod) as ssh: return ssh.check_return_code(f"ls {directory}") == 0 return True @@ -114,6 +164,7 @@ with Ldap() as ldap: services = [] mails_orgas = [] servers_locations = [] + nextcloud_ldap_wrong = [] for membre in membres: ldap_entry = ldap.get_email(membre["email"]) if ldap_entry: @@ -127,19 +178,20 @@ with Ldap() as ldap: size = int(get_disk_size(path) / 1024 / 1024) services.append(f"{membre['email']}: Paheko {membre['cloud']}, LDAP {ldap_entry[1]['nextcloudEnabled'][0].decode()}, espace cloud commun {size}Mo") - if not test_quota(membre, ldap_entry): + quota_ko = test_quota(membre, ldap_entry) + if quota_ko : suffix = "" if membre['emails_rattaches']: 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}") + 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()} diag {quota_ko} {suffix}") mails_orga = test_mails_orga(membre) if mails_orga: suffix = '\n '.join(mails_orga) mails_orgas.append(f"{membre['email']}:\n {suffix}") - # if not test_server_location(membre): - # servers_locations.append(f"{membre['email']} - {membre['nom_orga']}, pas trouvé sur {membre['serveur_prod']}") + if not test_server_location(membre): + servers_locations.append(f"{membre['email']} - {membre['nom_orga']}, pas trouvé sur {membre['serveur_prod']}") else: ldap_entry = ldap.get_mail_forwarding(membre["email"]) @@ -160,6 +212,19 @@ with Ldap() as ldap: else: not_in_paheko.append(ldap_user["mail"][0].decode()) + paheko_member = [x for x in membres if x["email"] == ldap_user["mail"][0].decode()] + paheko_member = paheko_member[0] if len(paheko_member) else None + if paheko_member or ldap_user["nextcloudEnabled"][0].decode() != "TRUE": + pass + else: + path = f"/var/lib/docker/volumes/cloud_cloudData/_data/{ldap_user['identifiantKaz'][0].decode()}" + size = int(get_disk_size(path) / 1024 / 1024) + nextcloud_ldap_wrong.append(f"{ldap_user["mail"][0].decode()}: espace cloud commun {size}Mo") + #if size < 30: + #print(f"{ldap_user["mail"][0].decode()} {size}") + #ldap.update_user(ldap_user["mail"][0].decode(), "nextcloudEnabled", b"FALSE") + #sys.exit(0) + ldap_forwardings = ldap.get_mail_forwardings() for ldap_user in ldap_forwardings: ldap_user = ldap_user[1] @@ -191,3 +256,6 @@ print("\n".join(mails_orgas)) print("\nOrgas pas trouvées sur le serveur renseigné dans paheko :") print("\n".join(servers_locations)) + +print("Comptes LDAP ayant Nextcloud actif à tort :") +print("\n".join(nextcloud_ldap_wrong))