[tor-commits] [bridgedb/master] 4568 - Update email responses

aagbsn at torproject.org aagbsn at torproject.org
Sat Mar 16 23:46:31 UTC 2013


commit 4078f236caefff20441a759722e8474522c7fc1d
Author: aagbsn <aagbsn at extc.org>
Date:   Fri Jun 15 16:33:23 2012 -0700

    4568 - Update email responses
    
    Add new strings for email response template that
    provide instructions for requesting ipv6 or transports
    
    Also move email composition into a separate function and
    remove code duplication.
---
 lib/bridgedb/I18n.py   |   13 +++++++--
 lib/bridgedb/Server.py |   71 ++++++++++++++++++++---------------------------
 2 files changed, 40 insertions(+), 44 deletions(-)

diff --git a/lib/bridgedb/I18n.py b/lib/bridgedb/I18n.py
index 24629f1..1e90348 100644
--- a/lib/bridgedb/I18n.py
+++ b/lib/bridgedb/I18n.py
@@ -53,8 +53,8 @@ bridge addresses."""),
  # BRIDGEDB_TEXT[9]
  _("""To receive your bridge relays, please prove you are human"""),
  # BRIDGEDB_TEXT[10]
- _("""You have exceeded the rate limit. Please slow down, the minimum time between
-emails is: """),
+ _("""You have exceeded the rate limit. Please slow down, the minimum time
+between emails is: """),
  # BRIDGEDB_TEXT[11]
  _("""hours"""),
  # BRIDGEDB_TEXT[12]
@@ -66,5 +66,12 @@ emails is: """),
  # BRIDGEDB_TEXT[15]
  _("""Upgrade your browser to Firefox"""),
  # BRIDGEDB_TEXT[16]
- _("""(Might be blocked)""") 
+ _("""(Might be blocked)"""),
+ # BRIDGEDB_TEXT[17]
+ _("""The following commands are also supported:"""),
+ # BRIDGEDB_TEXT[18]
+ _(""" ipv6 : request ipv6 bridges """),
+ # bridgedb_text[19]
+ _(""" transport TRANSPORT_NAME : request bridges with transport
+TRANSPORT_NAME, such as obfs3.""")
 ]
diff --git a/lib/bridgedb/Server.py b/lib/bridgedb/Server.py
index de5e545..172a0ba 100644
--- a/lib/bridgedb/Server.py
+++ b/lib/bridgedb/Server.py
@@ -161,7 +161,6 @@ class WebResource(twisted.web.resource.Resource):
 
         try:
             # validate method name
-            logging.debug("trans: %s" % request.args.get("transport")[0])
             transport = re.match('[_a-zA-Z][_a-zA-Z0-9]*',
                     request.args.get("transport")[0]).group()
         except (TypeError, IndexError):
@@ -430,7 +429,7 @@ def getMailResponse(lines, ctx):
             ipv6 = True
         if "transport" in ln.strip().lower():
             transport = re.search("transport ([_a-zA-Z][_a-zA-Z0-9]*)", ln).group(1).strip()
-            logging.debug("transport %s" % transport)
+            logging.debug("Got request for transport: %s" % transport)
 
     if ipv6:
         bridgeFilterRules.append(filterBridgesByIP6)
@@ -448,29 +447,16 @@ def getMailResponse(lines, ctx):
             interval, ctx.N,
             countryCode=None,
             bridgeFilterRules=bridgeFilterRules)
+
     # Handle rate limited email
     except TooSoonEmail, e:
         logging.info("Got a mail too frequently; warning %r: %s.",
                      clientAddr, e)
 
         # Compose a warning email
-        f = StringIO()
-        w = MimeWriter.MimeWriter(f)
-        w.addheader("From", ctx.fromAddr)
-        w.addheader("To", clientAddr)
-        w.addheader("Message-ID", twisted.mail.smtp.messageid())
-        if not subject.startswith("Re:"): subject = "Re: %s"%subject
-        w.addheader("Subject", subject)
-        if msgID:
-            w.addheader("In-Reply-To", msgID)
-        w.addheader("Date", twisted.mail.smtp.rfc822date())
-        body = w.startbody("text/plain")
-
         # MAX_EMAIL_RATE is in seconds, convert to hours
-        EMAIL_MESSAGE_RATELIMIT = buildSpamWarningTemplate(t)
-        body.write(EMAIL_MESSAGE_RATELIMIT % (bridgedb.Dist.MAX_EMAIL_RATE / 3600))
-        f.seek(0)
-        return clientAddr, f
+        body  = buildSpamWarningTemplate(t) % (bridgedb.Dist.MAX_EMAIL_RATE / 3600)
+        return composeEmail(ctx.fromAddr, clientAddr, subject, body, msgID)
 
     except IgnoreEmail, e:
         logging.info("Got a mail too frequently; ignoring %r: %s.",
@@ -482,19 +468,6 @@ def getMailResponse(lines, ctx):
                      clientAddr, e)
         return None, None 
 
-    # Generate the message.
-    f = StringIO()
-    w = MimeWriter.MimeWriter(f)
-    w.addheader("From", ctx.fromAddr)
-    w.addheader("To", clientAddr)
-    w.addheader("Message-ID", twisted.mail.smtp.messageid())
-    if not subject.startswith("Re:"): subject = "Re: %s"%subject
-    w.addheader("Subject", subject)
-    if msgID:
-        w.addheader("In-Reply-To", msgID)
-    w.addheader("Date", twisted.mail.smtp.rfc822date())
-    body = w.startbody("text/plain")
-
     if bridges:
         with_fp = ctx.cfg.EMAIL_INCLUDE_FINGERPRINTS
         answer = "".join("  %s\n" %b.getConfigLine(
@@ -506,15 +479,9 @@ def getMailResponse(lines, ctx):
     else:
         answer = "(no bridges currently available)"
 
-    EMAIL_MESSAGE_TEMPLATE = buildMessageTemplate(t)
-    body.write(EMAIL_MESSAGE_TEMPLATE % answer)
-
-    #XXX debug
-    f.seek(0)
-    logging.debug(f.readlines())
-    f.seek(0)
-    logging.info("Email looks good; we should send an answer.")
-    return clientAddr, f
+    body = buildMessageTemplate(t) % answer
+    # Generate the message.
+    return composeEmail(ctx.fromAddr, clientAddr, subject, body, msgID)
 
 def buildMessageTemplate(t):
     msg_template =  t.gettext(I18n.BRIDGEDB_TEXT[5]) + "\n\n" \
@@ -523,8 +490,10 @@ def buildMessageTemplate(t):
                     + t.gettext(I18n.BRIDGEDB_TEXT[1]) + "\n\n" \
                     + t.gettext(I18n.BRIDGEDB_TEXT[2]) + "\n\n" \
                     + t.gettext(I18n.BRIDGEDB_TEXT[3]) + "\n\n" \
+                    + t.gettext(I18n.BRIDGEDB_TEXT[17])+ "\n\n" \
+                    + t.gettext(I18n.BRIDGEDB_TEXT[18])+ "\n\n" \
+                    + t.gettext(I18n.BRIDGEDB_TEXT[19])+ "\n\n" \
                     + t.gettext(I18n.BRIDGEDB_TEXT[6]) + "\n\n"
-
     return msg_template
 
 def buildSpamWarningTemplate(t):
@@ -718,3 +687,23 @@ def getCCFromRequest(request):
     if len(path) ==  2:
         return path.lower()
     return None 
+
+def composeEmail(fromAddr, clientAddr, subject, body, msgID=False):
+    f = StringIO()
+    w = MimeWriter.MimeWriter(f)
+    w.addheader("From", fromAddr)
+    w.addheader("To", clientAddr)
+    w.addheader("Message-ID", twisted.mail.smtp.messageid())
+    if not subject.startswith("Re:"): subject = "Re: %s"%subject
+    w.addheader("Subject", subject)
+    if msgID:
+        w.addheader("In-Reply-To", msgID)
+    w.addheader("Date", twisted.mail.smtp.rfc822date())
+    mailbody = w.startbody("text/plain")
+    mailbody.write(body)
+
+    f.seek(0)
+    logging.debug(f.readlines())
+    f.seek(0)
+    logging.info("Email looks good; we should send an answer.")
+    return clientAddr, f





More information about the tor-commits mailing list