From bb69478a329f33c4e50cd19612be2a9bfe349ca3 Mon Sep 17 00:00:00 2001 From: Michel Blockelet Date: Sun, 9 May 2010 16:56:18 +0200 Subject: [PATCH] [deconnexion.py,fiche_deconnexion] Corrections vis-a-vis des accents Ca permettait aux gens qui avaient un accent dans leur nom de ne pas se faire deconnecter (plantage du script generate.py et donc de deconnexion.py). Par ailleurs, si generate.py plante, deconnexion.py deconnecte quand meme. darcs-hash:20100509145618-ddb99-8d9ab159498056ef83de79bc6e2ff62247803c3c.gz --- surveillance/deconnexion.py | 13 +++++++++-- surveillance/fiche_deconnexion/generate.py | 27 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index 99073561..2054f198 100644 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -211,7 +211,11 @@ for elupload, eltype, elid in uploadeurs: if nb_decos >= 3: # Génération du fichier postscript - fichier_ps = generate_ps('upload', proprio, ldap) + try: + fichier_ps = generate_ps('upload', proprio, ldap) + except: + fichier_ps = ("ERREUR lors de la génération. Merci de regénérer manuellement la fiche avec la commande :\n" + + "/usr/scripts/surveillance/fiche_deconnexion/generate.py --upload aid=%d" % proprio.id()) # Envoi du mail à disconnect corps = upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps} @@ -469,8 +473,13 @@ for ip, id_p2p, nombre in fraudeurs: ######################################### nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-365*24*3600 and x.split('$')[2] == 'autodisc_p2p' ]) if nb_decos >= 3: + # Génération du fichier postscript + try: + fichier_ps = generate_ps('p2p', proprio, ldap) + except: + fichier_ps = ("ERREUR lors de la génération. Merci de regénérer manuellement la fiche avec la commande :\n" + + "/usr/scripts/surveillance/fiche_deconnexion/generate.py --p2p aid=%d" % proprio.id()) - fichier_ps = generate_ps('p2p', proprio, ldap) # Envoi du mail à disconnect corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur, 'to': p2p.expediteur, diff --git a/surveillance/fiche_deconnexion/generate.py b/surveillance/fiche_deconnexion/generate.py index 95b67fa9..898c3de9 100644 --- a/surveillance/fiche_deconnexion/generate.py +++ b/surveillance/fiche_deconnexion/generate.py @@ -12,10 +12,14 @@ Licence : GPL v2 import sys sys.path.append('/usr/scripts/gestion') + from ldap_crans import crans_ldap -from time import * from config import upload + +from time import * +from unicodedata import normalize import commands + # logging tools import syslog def log(x): @@ -38,8 +42,22 @@ Les sanctions disponibles sont : usage: generate.py --sanction recherche_ldap Le motif de recherche dans la base ldap doit donné un résultat unique""" % "\n\t--".join(map(lambda x: x,sanctions)) +def decode(s): + u""" + Retourne un unicode à partir de s + s doit être en utf-8 + """ + if type(s) is unicode: + # Si s est déjà un unicode, on ne décode pas + return s + else: + return s.decode('utf-8', 'ignore') # On ignore les erreurs +def strip_accents(a): + u""" Supression des accents de la chaîne fournie """ + res = normalize('NFKD', decode(a)).encode('ASCII', 'ignore') + return res.replace(' ', '_').replace("'", '') def generate_ps(sanction, proprio, db): """En fonction de la sanction à appliquer au propriétaire, @@ -51,8 +69,8 @@ def generate_ps(sanction, proprio, db): dossier = '/usr/scripts/surveillance/fiche_deconnexion' # Base pour le nom du fichier - fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().\ - lower().replace(' ', '-')) + fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, + strip_accents(proprio.Nom().lower().replace(' ', '-'))) # Création du fichier tex format_date = '%A %d %B %Y' @@ -93,7 +111,8 @@ def generate_ps(sanction, proprio, db): except Exception, e: log('Erreur lors de la génération du ps : ') log(str(e)) - log("Values : sanction:%s adherent:%s" % (sanction, proprio.Nom())) + log("Values : sanction:%s adherent:%s" % (sanction, + strip_accents(proprio.Nom()))) log(crans.utils.exceptions.formatExc()) raise e