[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
This commit is contained in:
Michel Blockelet 2010-05-09 16:56:18 +02:00
parent 3ef5e506f8
commit bb69478a32
2 changed files with 34 additions and 6 deletions

View file

@ -211,7 +211,11 @@ for elupload, eltype, elid in uploadeurs:
if nb_decos >= 3:
# Génération du fichier postscript
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())
# Envoi du mail à disconnect
corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur,
'to': p2p.expediteur,

View file

@ -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