[deconnexion.py] passage en utf-8

darcs-hash:20090319122121-bd074-d8380ffbaca92867e3e79ffc843cea20d71739ec.gz
This commit is contained in:
Antoine Durand-Gasselin 2009-03-19 13:21:21 +01:00
parent 4577de7bbc
commit 3c25335710

View file

@ -180,7 +180,7 @@ for elupload, eltype, elid in uploadeurs:
print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid) print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid)
continue continue
proprio = proprio[0] proprio = proprio[0]
# On inscrit l'instance dans la table des avertis_hard # On inscrit l'instance dans la table des avertis_hard
###################################################### ######################################################
curseur.execute("INSERT INTO avertis_upload_hard (type,id,date) VALUES ('%s','%d','now')"%(eltype,elid)) curseur.execute("INSERT INTO avertis_upload_hard (type,id,date) VALUES ('%s','%d','now')"%(eltype,elid))
@ -191,33 +191,33 @@ for elupload, eltype, elid in uploadeurs:
fin = debut + 24*3600 fin = debut + 24*3600
proprio.blacklist([debut, fin, 'autodisc_upload', "Déconn auto. %s Mo" % elupload]) proprio.blacklist([debut, fin, 'autodisc_upload', "Déconn auto. %s Mo" % elupload])
proprio.save() proprio.save()
# On envoie un mail à l'adhérent # On envoie un mail à l'adhérent
################################ ################################
corps = upload.message_hard % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()} corps = upload.message_hard % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, proprio.email(), corps) mail.sendmail(upload.expediteur, proprio.email(), corps)
# On envoie un mail à disconnect # On envoie un mail à disconnect
################################ ################################
if upload.disconnect_mail_hard: if upload.disconnect_mail_hard:
corps = upload.message_disconnect_hard % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()} corps = upload.message_disconnect_hard % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, upload.expediteur, corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
# Vérification du nombre de déconnexions # Vérification du nombre de déconnexions
######################################### #########################################
nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-30*24*3600 and x.split('$')[2] == 'autodisc_upload' ]) nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-30*24*3600 and x.split('$')[2] == 'autodisc_upload' ])
if nb_decos >= 3: if nb_decos >= 3:
# Génération du fichier postscript # Génération du fichier postscript
fichier_ps = generate_ps('upload', proprio, ldap) fichier_ps = generate_ps('upload', proprio, ldap)
# Envoi du mail à disconnect # Envoi du mail à disconnect
corps = upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps} corps = upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps}
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, upload.expediteur, corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
elif elupload >= upload.soft: elif elupload >= upload.soft:
# L'adhérent a t il été averti # L'adhérent a t il été averti
############################## ##############################
@ -236,23 +236,23 @@ for elupload, eltype, elid in uploadeurs:
if len(proprio) != 1: if len(proprio) != 1:
print 'Proprio non trouvé (%s) %d'%(eltype, elid) print 'Proprio non trouvé (%s) %d'%(eltype, elid)
continue continue
proprio = proprio[0] proprio = proprio[0]
# On inscrit l'ip dans la table des avertis soft # On inscrit l'ip dans la table des avertis soft
################################################ ################################################
curseur.execute("INSERT INTO avertis_upload_soft (type,id,date) VALUES ('%s','%d','now')"%(eltype, elid)) curseur.execute("INSERT INTO avertis_upload_soft (type,id,date) VALUES ('%s','%d','now')"%(eltype, elid))
# On envoie un mail à l'adhérent # On envoie un mail à l'adhérent
################################ ################################
corps = upload.message_soft % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()} corps = upload.message_soft % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, proprio.email(), corps) mail.sendmail(upload.expediteur, proprio.email(), corps)
# On envoie un mail à disconnect # On envoie un mail à disconnect
################################ ################################
if upload.disconnect_mail_soft: if upload.disconnect_mail_soft:
corps = upload.message_disconnect_soft % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()} corps = upload.message_disconnect_soft % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, upload.expediteur, corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
# On supprime les vieux avertisements # On supprime les vieux avertisements
@ -263,7 +263,7 @@ curseur.execute("DELETE FROM avertis_upload_soft WHERE date < timestamp 'now' -
# Détection de l'existence de virus # # Détection de l'existence de virus #
################################################################################ ################################################################################
# Dans la table virus on sélectionne les ip_src qui appartiennent au réseau # Dans la table virus on sélectionne les ip_src qui appartiennent au réseau
requete = "SELECT ip_src,count(ip_src) FROM virus WHERE %s and date > timestamp 'now' - interval '1 hour' group by ip_src" % ip_src_in_crans requete = "SELECT ip_src,count(ip_src) FROM virus WHERE %s and date > timestamp 'now' - interval '1 hour' group by ip_src" % ip_src_in_crans
curseur.execute(requete) curseur.execute(requete)
infectes = curseur.fetchall() infectes = curseur.fetchall()
@ -278,21 +278,21 @@ for ip, nombre in infectes:
# Si on est en dessous du seuil, on laisse passer # Si on est en dessous du seuil, on laisse passer
if nombre < virus.virus: if nombre < virus.virus:
continue continue
# Si on est déja avertis, on laisse passer # Si on est déja avertis, on laisse passer
if [ip] in infectes_old: if [ip] in infectes_old:
continue continue
# Lecture des infos de ldap # Lecture des infos de ldap
machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0]
hostname = machine.nom() hostname = machine.nom()
proprio = machine.proprietaire() proprio = machine.proprietaire()
blacklist = proprio.blacklist() blacklist = proprio.blacklist()
# Inscription dans la table des infectés # Inscription dans la table des infectés
requete = "INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip requete = "INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip
curseur.execute(requete) curseur.execute(requete)
# On récupère les index des lignes de bl où il y a marqué virus # On récupère les index des lignes de bl où il y a marqué virus
index = [blacklist.index(x) for x in blacklist if 'virus' in x ] index = [blacklist.index(x) for x in blacklist if 'virus' in x ]
if index: if index:
@ -319,11 +319,11 @@ curseur.execute(requete)
infectes_old = curseur.fetchall() infectes_old = curseur.fetchall()
for ip, nombre in infectes: for ip, nombre in infectes:
# Si on est en dessous du seuil, ou qu'on est déjà averti, on laisse passer # Si on est en dessous du seuil, ou qu'on est déjà averti, on laisse passer
if nombre < virus.flood or [ip] in infectes_old: if nombre < virus.flood or [ip] in infectes_old:
continue continue
# Lecture des infos de ldap # Lecture des infos de ldap
try : try :
machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0]
@ -338,7 +338,7 @@ for ip, nombre in infectes:
# Inscription dans la table des infectés # Inscription dans la table des infectés
requete = "INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip requete = "INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip
curseur.execute(requete) curseur.execute(requete)
# On récupère les index des lignes de bl où il y a marqué virus # On récupère les index des lignes de bl où il y a marqué virus
index = [ blacklist.index(x) for x in blacklist if 'virus' in x ] index = [ blacklist.index(x) for x in blacklist if 'virus' in x ]
if index: if index:
@ -360,17 +360,17 @@ curseur.execute(requete)
infectes = [ x[0] for x in curseur.fetchall() ] infectes = [ x[0] for x in curseur.fetchall() ]
for IP in infectes: for IP in infectes:
# Nombre de requêtes de virus # Nombre de requêtes de virus
requete1 = "SELECT COUNT(ip_src) FROM virus where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP requete1 = "SELECT COUNT(ip_src) FROM virus where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP
curseur.execute(requete1) curseur.execute(requete1)
nb_virus = curseur.fetchall() nb_virus = curseur.fetchall()
# Nombre de requêtes de flood # Nombre de requêtes de flood
requete2 = "SELECT COUNT(ip_src) FROM flood where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP requete2 = "SELECT COUNT(ip_src) FROM flood where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP
curseur.execute(requete2) curseur.execute(requete2)
nb_flood = curseur.fetchall() nb_flood = curseur.fetchall()
# On ne traite que les IP qui sont descendues en dessous des seuils # On ne traite que les IP qui sont descendues en dessous des seuils
if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood: if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood:
try: try:
@ -386,7 +386,7 @@ for IP in infectes:
bl = proprio.blacklist() bl = proprio.blacklist()
hostname = machine.nom() hostname = machine.nom()
# On stoppe la sanction pour une ligne existante de la blackliste # On stoppe la sanction pour une ligne existante de la blackliste
# En prenant en compte le fait que d'autres lignes de blackliste # En prenant en compte le fait que d'autres lignes de blackliste
# ont pu s'ajouter. # ont pu s'ajouter.
lignes_enlevees = 0 lignes_enlevees = 0
for ligne in bl: for ligne in bl:
@ -399,7 +399,7 @@ for IP in infectes:
lignes_enlevees += 1 lignes_enlevees += 1
if lignes_enlevees == 0: if lignes_enlevees == 0:
print "Suppression de %s des machines infectees, mais aucune blackliste"%hostname print "Suppression de %s des machines infectees, mais aucune blackliste"%hostname
requete = "DELETE FROM avertis_virus where ip_crans='%s'"%IP requete = "DELETE FROM avertis_virus where ip_crans='%s'"%IP
curseur.execute(requete) curseur.execute(requete)
################################################################################ ################################################################################
@ -417,19 +417,19 @@ curseur.execute(requete)
avertisp2p = curseur.fetchall() avertisp2p = curseur.fetchall()
for ip, id_p2p, nombre in fraudeurs: for ip, id_p2p, nombre in fraudeurs:
# On récupére le protocole de p2p : # On récupére le protocole de p2p :
requete = "SELECT nom FROM protocole_p2p WHERE id_p2p=%d" % id_p2p requete = "SELECT nom FROM protocole_p2p WHERE id_p2p=%d" % id_p2p
curseur.execute(requete) curseur.execute(requete)
protocole = curseur.fetchall()[0][0] protocole = curseur.fetchall()[0][0]
# On ne prend pas en compte s'il est sous le seuil admis, ou # On ne prend pas en compte s'il est sous le seuil admis, ou
#s'il est averti #s'il est averti
if nombre <= p2p.limite[protocole] or [ip, protocole] in avertisp2p: if nombre <= p2p.limite[protocole] or [ip, protocole] in avertisp2p:
continue continue
if id_p2p == 1: if id_p2p == 1:
continue continue
# Récupération des ref de la machine # Récupération des ref de la machine
machines = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'] machines = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine']
if len(machines) == 0: if len(machines) == 0:
@ -437,9 +437,9 @@ for ip, id_p2p, nombre in fraudeurs:
continue continue
machine = machines[0] machine = machines[0]
hostname = machine.nom() hostname = machine.nom()
proprio = machine.proprietaire() proprio = machine.proprietaire()
blacklist = proprio.blacklist() blacklist = proprio.blacklist()
# Envoi du mail à disconnect # Envoi du mail à disconnect
if p2p.disconnect_mail: if p2p.disconnect_mail:
requete = "select date from p2p where date > timestamp 'now' - interval '2 hours' and ip_src='%s' order by date limit 1"%ip requete = "select date from p2p where date > timestamp 'now' - interval '2 hours' and ip_src='%s' order by date limit 1"%ip
@ -451,27 +451,27 @@ for ip, id_p2p, nombre in fraudeurs:
'hostname': hostname, 'hostname': hostname,
'nb_paquets': nombre, 'nb_paquets': nombre,
'datedebut': date } 'datedebut': date }
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, upload.expediteur, corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
# Inscription dans la base des avertis # Inscription dans la base des avertis
requete = "INSERT INTO avertis_p2p (ip_crans,date,protocole) VALUES ('%s','now','%s')" % (ip, protocole) requete = "INSERT INTO avertis_p2p (ip_crans,date,protocole) VALUES ('%s','now','%s')" % (ip, protocole)
curseur.execute(requete) curseur.execute(requete)
# On envoie un mail a l'adhérent # On envoie un mail a l'adhérent
################################ ################################
corps = p2p.deconnexion % { 'From': p2p.expediteur, corps = p2p.deconnexion % { 'From': p2p.expediteur,
'To': proprio.email(), 'To': proprio.email(),
'protocole': protocole, 'protocole': protocole,
'hostname': hostname } 'hostname': hostname }
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(p2p.expediteur, proprio.email(), corps) mail.sendmail(p2p.expediteur, proprio.email(), corps)
# Vérification du nombre de déconnexions # Vérification du nombre de déconnexions
######################################### #########################################
nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-365*24*3600 and x.split('$')[2] == 'autodisc_p2p' ]) 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: if nb_decos >= 3:
fichier_ps = generate_ps('p2p', proprio, ldap) fichier_ps = generate_ps('p2p', proprio, ldap)
# Envoi du mail à disconnect # Envoi du mail à disconnect
corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur, corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur,
@ -479,7 +479,7 @@ for ip, id_p2p, nombre in fraudeurs:
'nbdeco': nb_decos, 'nbdeco': nb_decos,
'proprio':proprio.Nom(), 'proprio':proprio.Nom(),
'ps': fichier_ps } 'ps': fichier_ps }
corps = corps.encode('iso 8859-15') corps = corps.encode('utf-8')
mail.sendmail(p2p.expediteur, p2p.expediteur, corps) mail.sendmail(p2p.expediteur, p2p.expediteur, corps)
# L'adhérent n'est pas encore blacklisté # L'adhérent n'est pas encore blacklisté