coda : interception et ré-écriture des URL
authorProgfou <jean-christophe.andre@auf.org>
Wed, 2 Oct 2013 04:16:17 +0000 (00:16 -0400)
committerProgfou <jean-christophe.andre@auf.org>
Wed, 2 Oct 2013 04:16:17 +0000 (00:16 -0400)
coda/coda-filter.py [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 0134cbd..5f1c334
@@ -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 <sysexits.h>
 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