[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r16913: {projects} This actually implements the other half of yesterdays commit (projects/gettor)



Author: ioerror
Date: 2008-09-15 17:26:45 -0400 (Mon, 15 Sep 2008)
New Revision: 16913

Modified:
   projects/gettor/gettor.py
   projects/gettor/gettor_blacklist.py
   projects/gettor/gettor_config.py
   projects/gettor/gettor_log.py
   projects/gettor/gettor_requests.py
   projects/gettor/gettor_responses.py
Log:
This actually implements the other half of yesterdays commit. There was an error with the patch. We've refactored some code and added getopts. Major code change by kaner.


Modified: projects/gettor/gettor.py
===================================================================
--- projects/gettor/gettor.py	2008-09-15 14:32:04 UTC (rev 16912)
+++ projects/gettor/gettor.py	2008-09-15 21:26:45 UTC (rev 16913)
@@ -54,28 +54,57 @@
 except ImportError:
     antigravity = None
 
+import sys
+import getopt
+import gettext
 import gettor_blacklist
 import gettor_requests
 import gettor_responses
 from gettor_log import gettorLogger
+from gettor_config import gettorConf
 
-log = gettorLogger()
 
+def usage():
+    print "Usage: gettor.py [-c CONFIG|-h]"
+    print ""
+
 if __name__ == "__main__":
 
+    # Parse args
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['help', 'config='])
+    except getopt.GetoptError:
+        usage()
+        sys.exit(1)
+ 
+    config = None
+    for c, optarg in opts:
+        if c in ("-h", "--help"):
+            usage()
+            sys.exit(0)
+        if c in ("-c", "--config"):
+            config = optarg
 
+    if config != None:
+        conf = gettorConf(config)
+    else:
+        conf = gettorConf()
+    log  = gettorLogger()
+    locale = conf.getLocale()
+    trans = gettext.translation("gettor", "/usr/share/locale", [locale]) 
+    trans.install()
     rawMessage = gettor_requests.getMessage()
     parsedMessage = gettor_requests.parseMessage(rawMessage)
 
     if not parsedMessage:
-        log.log("No parsed message. Dropping message.")
+        log.log(_("No parsed message. Dropping message."))
         exit(0)
 
     signature = False
     signature = gettor_requests.verifySignature(rawMessage)
-    log.log("Signature is : " + str(signature))
+    log.log(_("Signature is: %s") % str(signature))
     replyTo = False
-    srcEmail = "gettor@xxxxxxxxxxxxxx"
+    srcEmail = conf.getSrcEmail()
 
     # TODO XXX:
     # Make the zip files and ensure they match packageList
@@ -84,7 +113,7 @@
     #   vidalia-bundle-0.2.0.29-rc-0.1.6.exe \
     #   vidalia-bundle-0.2.0.29-rc-0.1.6.exe.asc
     #
-    distDir = "/var/lib/gettor/pkg/"
+    distDir = conf.getDistDir()
     packageList = {
         "windows-bundle": distDir + "windows-bundle.z",
         "macosx-panther-ppc-bundle": distDir + "macosx-panther-ppc-bundle.z",
@@ -100,17 +129,17 @@
         previouslyHelped = gettor_blacklist.blackList(replyTo)
     
     if not replyTo:
-        log.log("No help dispatched. Invalid reply address for user.")
+        log.log(_("No help dispatched. Invalid reply address for user."))
         exit(0)
 
     if not signature and previouslyHelped:
-        log.log("Unsigned messaged to gettor by blacklisted user dropped.")
+        log.log(_("Unsigned messaged to gettor by blacklisted user dropped."))
         exit(0)
 
     if not signature and not previouslyHelped:
         # Reply with some help and bail out
         gettor_blacklist.blackList(replyTo, True)
-        message = """
+        message = _("""
 Hello! This is the "get tor" robot.
 
 Unfortunately, we won't answer you at this address. We only process
@@ -123,14 +152,14 @@
 
 (We apologize if you didn't ask for this mail. Since your email is from
 a service that doesn't use DKIM, we're sending a short explanation,
-and then we'll ignore this email address for the next day or so.)
-        """
+and then we'll ignore this email address for the next day or so.
+        """)
         gettor_responses.sendHelp(message, srcEmail, replyTo)
-        log.log("Unsigned messaged to gettor. We issued some help about using DKIM.")
+        log.log(_("Unsigned messaged to gettor. We issued some help about using DKIM."))
         exit(0)
 
     if signature:
-        log.log("Signed messaged to gettor.")
+        log.log(_("Signed messaged to gettor."))
         
         try:
             package = gettor_requests.parseRequest(parsedMessage, packageList)
@@ -138,18 +167,20 @@
             package = None
 
         if package != None:
-            log.log("Package: " + str(package) + " selected.")
-            message = "Here's your requested software as a zip file. Please " + \
-            "unzip the package and verify the signature."
+            log.log(_("Package: %s selected.") % str(package))
+            message = _("""
+Here's your requested software as a zip file. Please unzip the 
+package and verify the signature.
+            """)
             gettor_responses.sendPackage(message, srcEmail, replyTo, packageList[package])  
             exit(0)
         else:
-            message = ["Hello, I'm a robot. "]
-            message.append("Your request was not understood. Please select one of the following package names:\n")
+            message = [_("Hello, I'm a robot. ")]
+            message.append(_("Your request was not understood. Please select one of the following package names:\n"))
 
             for key in packageList.keys():
                 message.append(key + "\n")
-            message.append("Please send me another email. It only needs a single package name anywhere in the body of your email.\n")
+            message.append(_("Please send me another email. It only needs a single package name anywhere in the body of your email.\n"))
             gettor_responses.sendHelp(''.join(message), srcEmail, replyTo)
-            log.log("Signed messaged to gettor. We issued some help about proper email formatting.")
+            log.log(_("Signed messaged to gettor. We issued some help about proper email formatting."))
             exit(0)

Modified: projects/gettor/gettor_blacklist.py
===================================================================
--- projects/gettor/gettor_blacklist.py	2008-09-15 14:32:04 UTC (rev 16912)
+++ projects/gettor/gettor_blacklist.py	2008-09-15 21:26:45 UTC (rev 16913)
@@ -5,9 +5,11 @@
 
 import hashlib
 import os
+from gettor_config import gettorConf
 
-stateDir = "/var/lib/gettor/"
-blStateDir = stateDir + "bl/"
+conf = gettorConf()
+stateDir = conf.getStateDir()
+blStateDir = conf.getBlStateDir()
 
 def blackList(address, createEntry=False):
     """ 
@@ -30,7 +32,7 @@
 
     return False
 
-def lookupBlackListEntry(privateAddress, stateDir="/var/lib/gettor/bl/"):
+def lookupBlackListEntry(privateAddress):
     """ Check to see if we have a blacklist entry for the given address. """
     entry = stateDir + str(privateAddress)
     try:
@@ -39,9 +41,9 @@
         return False
     return True
 
-def createBlackListEntry(privateAddress, stateDir="/var/lib/gettor/bl/"):
+def createBlackListEntry(privateAddress):
     """ Create a zero byte file that represents the address in our blacklist. """
-    entry = stateDir + str(privateAddress)
+    entry = blStateDir + str(privateAddress)
     stat = None
     try:
         stat = os.stat(entry)
@@ -54,9 +56,9 @@
             return False
     return False
 
-def removeBlackListEntry(privateAddress, stateDir="/var/lib/gettor/bl/"):
+def removeBlackListEntry(privateAddress):
     """ Remove the zero byte file that represents an entry in our blacklist."""
-    entry = stateDir + str(privateAddress)
+    entry = blStateDir + str(privateAddress)
     stat = None
     try:
         entry = os.unlink(entry)
@@ -70,7 +72,7 @@
     privateAddress = hash.hexdigest()
     return privateAddress
 
-def prepBLStateDir(stateDir = "/var/lib/gettor/"):
+def prepBLStateDir():
     stat = None
     try:
         stat = os.stat(stateDir)

Modified: projects/gettor/gettor_config.py
===================================================================
--- projects/gettor/gettor_config.py	2008-09-15 14:32:04 UTC (rev 16912)
+++ projects/gettor/gettor_config.py	2008-09-15 21:26:45 UTC (rev 16913)
@@ -71,7 +71,7 @@
             self.config.set("global", "distDir", self.distDir)
 
         if self.config.has_option("global", "locale"):
-            self.lang = self.config.get("global", "locale")
+            self.locale = self.config.get("global", "locale")
         else:
             self.config.set("global", "locale", self.locale)
 
@@ -101,8 +101,8 @@
     def getDistDir(self):
         return self.distDir
 
-    def getLang(self):
-        return self.lang
+    def getLocale(self):
+        return self.locale
 
     def getLogSubSystem(self):
         return self.logSubSystem

Modified: projects/gettor/gettor_log.py
===================================================================
--- projects/gettor/gettor_log.py	2008-09-15 14:32:04 UTC (rev 16912)
+++ projects/gettor/gettor_log.py	2008-09-15 21:26:45 UTC (rev 16913)
@@ -31,9 +31,18 @@
                 self.logfd = open(logfile, "a+")
             except:
                 self.logfd = None
+
+    def _del_(self):
+        if logger == "file" and self.logfd == None:
+            self.logfd.close()
     
     def log(self, message):
-        now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
+        # Syslog does not need a timestamp
+        if self.logger == "syslog":
+            now = ""
+        else:
+            now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
+
         message = self.logPrefix + now + " : "+ message
 
         # By default, we'll just drop the message
@@ -46,7 +55,6 @@
             
         elif self.logger == "file":
             self.logfd.write(message)
-            self.logfd.close()
 
         elif self.logger == "stdout":
             print message

Modified: projects/gettor/gettor_requests.py
===================================================================
--- projects/gettor/gettor_requests.py	2008-09-15 14:32:04 UTC (rev 16912)
+++ projects/gettor/gettor_requests.py	2008-09-15 21:26:45 UTC (rev 16913)
@@ -62,23 +62,23 @@
         "source-bundle": "/var/lib/gettor/pkg/source-bundle.z"
         }
 
-    print "Fetching raw message."
+    print _("Fetching raw message.")
     rawMessage = getMessage()
     # This doesn't work without DNS ( no wifi on board current airplane )
-    print "Verifying signature of message."
+    print _("Verifying signature of message.")
     signature = verifySignature(rawMessage)
-    print "Parsing Message."
+    print _("Parsing Message.")
     parsedMessage = parseMessage(rawMessage)
-    print "Parsing reply."
+    print _("Parsing reply.")
     parsedReply = parseReply(parsedMessage)
-    print "Parsing package request."
+    print _("Parsing package request.")
     package = parseRequest(parsedMessage, packageList)
     if package == None:
         package = "help"        
     else:
         package = packageList[package]
 
-    print "The signature status of the email is: " + str(signature)
-    print "The email requested the following reply address: " + parsedReply
-    print "It looks like the email requested the following package: " + package
-    print "We would select the following package file: " + package
+    print _("The signature status of the email is: %s") % str(signature)
+    print _("The email requested the following reply address: %s") % parsedReply
+    print _("It looks like the email requested the following package: %s") % package
+    print _("We would select the following package file: ") % package

Modified: projects/gettor/gettor_responses.py
===================================================================
--- projects/gettor/gettor_responses.py	2008-09-15 14:32:04 UTC (rev 16912)
+++ projects/gettor/gettor_responses.py	2008-09-15 21:26:45 UTC (rev 16913)
@@ -32,7 +32,7 @@
     message = StringIO.StringIO()
     mime = MimeWriter.MimeWriter(message)
     mime.addheader('MIME-Version', '1.0')
-    mime.addheader('Subject', 'Re: Your "get tor" request')
+    mime.addheader('Subject', _('Re: Your "get tor" request'))
     mime.addheader('To', recipient)
     mime.addheader('From', ourAddress)
     mime.startmultipartbody('mixed')