diff --git a/gestion/chambres_vides.py b/gestion/chambres_vides.py index 5f2630c7..fca65d68 100755 --- a/gestion/chambres_vides.py +++ b/gestion/chambres_vides.py @@ -10,40 +10,61 @@ import ldap_crans conn = ldap_crans.CransLdap() import sys +sendmails = False +if "--mail-all" in sys.argv: + sendmails = True +import email.Header + import os import config year = config.ann_scol -delai = 0 # jours avant d'être considéré déserteur +delai = config.upload.demenagement_delai # On récupère ceux qui n'ont pas payé cette année bad_boys_e_s = conn.search('chbre=????&paiement=%d&paiement!=%d' % (year-1,year))['adherent'] -timeout = time.time() - 3600*24*delai +now = time.time() -header_printed = False to_print = [] for clandestin in bad_boys_e_s: # On cherche la dernière fois qu'il s'est retrouvé en chambre ???? for l in clandestin.historique(): # On récupère la date du dernier changement de chambre # (l'historique est enregistré par ordre chronologique) - x = re.match("(.*),.* : chbre \(.*-> \?\?\?\?\)",l) + x = re.match("(.*),.* : chbre \((.*) -> \?\?\?\?\)",l) if x <> None: - d = x.group(1) + kickout_date = x.group(1) + exchambre = x.group(2) + machine_liste = clandestin.machines() # On lui accorde un délai - if timeout < time.mktime(time.strptime(d,'%d/%m/%Y %H:%M')): - continue - - for m in clandestin.machines(): - # On n'a pas envie d'essayer de supprimer une machine qui a une blackliste - if len(m.blacklist_actif()) > 0: - continue - to_print.append( (clandestin.id(), m.ip(), m.id(), m.nom()) ) - ##m2 = conn.search('mid=%s' % m.id(),mode='w')['machine'][0] - ##m2.delete('Adherent sans chambre valide depuis %d jours' % delai) + kickout_date = time.mktime(time.strptime(kickout_date, "%d/%m/%Y %H:%M")) + delta = now - kickout_date + ttl = delai*86400 - delta + if ttl > 0: + if sendmails and machine_liste != []: + # On lui envoie un mail pour le prévenir + to = clandestin.mail() + if not "@" in to: + to += "@crans.org" + mail = config.upload.message_demenagement % {"from" : "respbats@crans.org", + "chambre" : exchambre, + "jours" : int(ttl/86400) + 1, + "to" : to} + mailer = os.popen("/usr/sbin/sendmail -t", "w") + mailer.write(mail.encode("utf-8") + "\n.") + mailer.close() + + else: + for m in machine_liste: + # On n'a pas envie d'essayer de supprimer une machine qui a une blackliste + if len(m.blacklist_actif()) > 0: + continue + to_print.append( (clandestin.id(), m.ip(), m.id(), m.nom()) ) + m2 = conn.search('mid=%s' % m.id(),mode='w')['machine'][0] + m2.delete('Adherent sans chambre valide depuis %d jours' % delai) if to_print != []: # Il s'est passé quelque chose, donc on envoie un mail @@ -59,7 +80,7 @@ if to_print != []: for aid, ip, mid, hostname in to_print: message += template % (aid, ip, mid, hostname) message += tiret_line - headers = u"From: respbats@crans.org\nSubject: Machines supprimées pour chambre invalide\n" + headers = u"From: respbats@crans.org\nSubject: %s\n" % email.Header.make_header([("Machines supprimées pour chambre invalide", "utf8")]).encode() headers += u"Content-Type: text/plain; charset=UTF-8\n" headers += u"To: respbats@crans.org\n" mail = headers + "\n" + message diff --git a/gestion/config.py b/gestion/config.py index ea9d2b59..bfacb9c9 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -10,6 +10,9 @@ from time import localtime # Fichier généré from config_srv import adm_only, role +# Pour les emails +import email.Header + ##### Gestion des câblages # Selon la date, on met : # -ann_scol : Année scolaire en cours @@ -278,22 +281,24 @@ Le PS a été généré et se trouve sur zamok : --\u0020 Message créé par deconnexion.py""" - - message_demenagement = u"""From: %(from)s -To: %(to)s -Subject: =?iso-8859-1?Q?D=E9m=E9nagement=20non=20d=E9clar=E9?= + demenagement_delai = 8 + # Nombre de jours après le passage en chambre ???? où on supprime les machines + message_demenagement = u"""From: %%(from)s +To: %%(to)s +Subject: %s Content-Type: text/plain; charset="utf-8" Bonjour, -Il semble que tu étais inscrit dans la chambre %(chambre), mais un +Il semble que tu étais inscrit dans la chambre %%(chambre)s, mais un autre adhérent s'y est inscrit, ce qui suppose que tu n'y es plus. -Pourrais tu nous préciser ta nouvelle chambre ou adresse stp ? -Si tu es parti du campus, souhaites-tu garder tes machines ? +Pourrais-tu passer à une permanence afin de régulariser ta situation ? + +Si tu ne nous donnes pas de nouvelles d'ici %%(jours)s jours, tes machines seront +automatiquement effacées de notre base de données. --\u0020 -Merci par avance, -Les membres actifs du Crans""" +Les membres actifs du Crans""" % email.Header.make_header([("Déménagement non déclaré", "utf8")]) # Classe pour les paramètres du firewall #