X-Git-Url: http://git.auf.org/?p=progfou.git;a=blobdiff_plain;f=coda%2Fcoda-filter.py;h=5f1c3346346a30e3e76f96fb1864a861019b112b;hp=0134cbd48ff344c5c4773cb24fecdd283122187c;hb=HEAD;hpb=51090a4df526bdae026b271d47a57ccab521e48e diff --git a/coda/coda-filter.py b/coda/coda-filter.py old mode 100644 new mode 100755 index 0134cbd..5f1c334 --- a/coda/coda-filter.py +++ b/coda/coda-filter.py @@ -16,6 +16,7 @@ # import sys import email +import email.charset from email.header import decode_header import smtplib import re @@ -30,6 +31,12 @@ ORGANIZATION = "Agence universitaire de la Francophonie" DOC_PATTERN = r'^(.*:)?\s*(\S+)\s*/\s*(\d+)\s*$' # format du nouveau nom de document (à partir du type et numéro) DOC_FORMAT = 'CODA-%s-%08d.pdf' +# réécriture des liens pour coda.auf +BODY_PATTERN_1 = r'\n(http://coda.auf/)(.*)\n' +BODY_FORMAT_1 = r'\n\nAccès depuis une implantation AUF :\n \1\2\n\nAccès depuis Internet :\n https://coda.auf.org/\2\n\n' +# réécriture des liens pour form.coda.auf +BODY_PATTERN_2 = r'\n(http://form.coda.auf/)(.*)\n' +BODY_FORMAT_2 = r'\n\nAccès depuis une implantation AUF :\n \1\2\n\nAccès depuis Internet :\n https://form-coda.auf.org/\2\n\n' # codes de sortie venant de EX_TEMPFAIL = 75 @@ -52,6 +59,11 @@ except Exception, err: # TRAITEMENTS #-------------------------------------------------------------------------- +# par défaut les textes seront codés en Quoted-Printable +qp_charset = email.charset.Charset('utf-8') +qp_charset.header_encoding = email.charset.QP +qp_charset.body_encoding = email.charset.QP + # 05. si le destinataire est noreply@auf.org, on le remplace par l'émetteur # (ANNULÉ car ça ne devrait plus arriver) # (REPRIS pour le cas où le destinataire est impression-coda@auf.org) @@ -99,6 +111,20 @@ except Exception, err: # parcours des différentes parties du courriel for part in msg.walk(): + # traitement du corps de message pour y remplacer : + # http://coda.auf/coda/… + # par : + # Accès depuis une implantation AUF : http://coda.auf/coda/… + # Accès depuis Internet : https://coda.auf.org/coda/… + if part.get_content_type() == 'text/plain': + text = part.get_payload(decode=True) + new_text = re.sub(BODY_PATTERN_1, BODY_FORMAT_1, text) + new_text = re.sub(BODY_PATTERN_2, BODY_FORMAT_2, new_text) + if new_text != text: + del part['Content-Transfer-Encoding'] + part.set_payload(new_text, qp_charset) + continue + # traitement uniquement si c'est un attachement de PDF if part.get_content_type() != 'application/pdf': continue # adaptation du nom de fichier dans le Content-Type