File:  [Repository] / VSyncer / xmlrpclibBasicAuth.py
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Wed Jan 2 19:01:35 2008 UTC (16 years, 6 months ago) by casties
Branches: MAIN
CVS tags: HEAD
first checking of modified SourceSyncer

    1: # Thanks Amos and Chris at DC
    2: # http://www.zope.org/Members/Amos/XML-RPC
    3: 
    4: # path to xmlrpclib, works fine in Zope but when running from the command line
    5: # seems to fail. Annoying.
    6: # import sys
    7: # sys.path.insert(0, r'd:\XMLTest1\lib\python')
    8: 
    9: import string, xmlrpclib, httplib
   10: from base64 import encodestring
   11: 
   12: def Server(url, username, password):
   13:     t = BasicAuthTransport(username, password)
   14:     return xmlrpclib.Server(url, t)
   15: 
   16: class BasicAuthTransport(xmlrpclib.Transport):
   17:     def __init__(self, username=None, password=None):
   18:         self.username = username
   19:         self.password = password
   20:         self.verbose = None
   21:         self.has_ssl = httplib.__dict__.has_key("HTTPConnection")
   22: 
   23:     def request(self, host, handler, request_body, verbose=None):
   24:         # issue XML-RPC request
   25:         if self.has_ssl:
   26:             if host.startswith("https:"): h = httplib.HTTPSConnection(host)
   27:             else: h = httplib.HTTPConnection(host)
   28:         else: h = httplib.HTTP(host)        
   29: 
   30:         h.putrequest("POST", handler)
   31: 
   32:         # required by HTTP/1.1
   33:         if not self.has_ssl: # HTTPConnection already does 1.1
   34:             h.putheader("Host", host)
   35:         h.putheader("Connection", "close")
   36: 
   37:         # required by XML-RPC
   38:         h.putheader("User-Agent", self.user_agent)
   39:         h.putheader("Content-Type", "text/xml")
   40:         h.putheader("Content-Length", str(len(request_body)))
   41: 
   42:         # basic auth
   43:         if self.username is not None and self.password is not None:
   44:             h.putheader("AUTHORIZATION", "Basic %s" % string.replace(
   45:                     encodestring("%s:%s" % (self.username, self.password)),
   46:                     "\012", ""))
   47:         h.endheaders()
   48: 
   49:         if request_body: h.send(request_body)
   50:         if self.has_ssl:
   51:             response = h.getresponse()
   52:             if response.status != 200:
   53:                 raise xmlrpclib.ProtocolError(host + handler,
   54:                                               response.status, 
   55:                                               response.reason,
   56:                                               response.msg)
   57:             file = response.fp
   58:         else:
   59:             errcode, errmsg, headers = h.getreply()
   60:             if errcode != 200:
   61:                 raise xmlrpclib.ProtocolError(host + handler, errcode, errmsg, headers)
   62: 
   63:             file = h.getfile()
   64: 
   65:         return self.parse_response(file) 
   66: 
   67: if __name__=='__main__':
   68:     pass

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>