]> git.ozlabs.org Git - patchwork/commitdiff
pwclient: allow authenticated https connections
authorJeremy Kerr <jk@ozlabs.org>
Fri, 19 Mar 2010 07:20:47 +0000 (15:20 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Fri, 19 Mar 2010 07:47:48 +0000 (15:47 +0800)
If the xmlrpc server is using HTTPS, we need to adapt our custom
transport to use SafeTransport.make_connection

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Tested-by: Paul Mundt <lethal@linux-sh.org>
apps/patchwork/bin/pwclient

index b4804080921b0c90ebd4a4140d8751c64529b463..dc836e918121fdac782e2111987817ecf33d2d93 100755 (executable)
@@ -79,12 +79,13 @@ class Filter:
         """Return human-readable description of the filter."""
         return str(self.d)
 
-class BasicHTTPAuthTransport(xmlrpclib.Transport):
+class BasicHTTPAuthTransport(xmlrpclib.SafeTransport):
 
-    def __init__(self, username = None, password = None):
+    def __init__(self, username = None, password = None, use_https = False):
         self.username = username
         self.password = password
-        xmlrpclib.Transport.__init__(self)
+        self.use_https = use_https
+        xmlrpclib.SafeTransport.__init__(self)
 
     def authenticated(self):
         return self.username != None and self.password != None
@@ -97,6 +98,13 @@ class BasicHTTPAuthTransport(xmlrpclib.Transport):
         auth = 'Basic ' + base64.encodestring(credentials).strip()
         connection.putheader('Authorization', auth)
 
+    def make_connection(self, host):
+        if self.use_https:
+            fn = xmlrpclib.SafeTransport.make_connection
+        else:
+            fn = xmlrpclib.Transport.make_connection
+        return fn(self, host)
+
 def usage():
     sys.stderr.write("Usage: %s <action> [options]\n\n" % \
                         (os.path.basename(sys.argv[0])))
@@ -365,9 +373,12 @@ def main():
         if config.has_option('auth', 'username') and \
                 config.has_option('auth', 'password'):
 
+            use_https = url.startswith('https')
+
             transport = BasicHTTPAuthTransport( \
                     config.get('auth', 'username'),
-                    config.get('auth', 'password'))
+                    config.get('auth', 'password'),
+                    use_https)
 
         else:
             sys.stderr.write(("The %s action requires authentication, "