[Erp5-report] r23454 - /erp5/trunk/products/ERP5Wizard/Tool/WizardTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Sep 5 17:32:06 CEST 2008


Author: ivan
Date: Fri Sep  5 17:32:01 2008
New Revision: 23454

URL: http://svn.erp5.org?rev=23454&view=rev
Log:
Add basic cookie support.

Modified:
    erp5/trunk/products/ERP5Wizard/Tool/WizardTool.py

Modified: erp5/trunk/products/ERP5Wizard/Tool/WizardTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Wizard/Tool/WizardTool.py?rev=23454&r1=23453&r2=23454&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Wizard/Tool/WizardTool.py (original)
+++ erp5/trunk/products/ERP5Wizard/Tool/WizardTool.py Fri Sep  5 17:32:01 2008
@@ -40,7 +40,11 @@
 import xmlrpclib, socket, sys, traceback, urllib, urllib2, base64, cgi
 from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager
 import zLOG
-
+import cookielib
+
+# global (RAM) cookie storage
+cookiejar = cookielib.CookieJar()
+  
 def _setSuperSecurityManager(self):
   """ Change to super user account. """
   user = self.getWrappedOwner()
@@ -207,10 +211,13 @@
     handler = getattr(urllib2, name, None)
     if handler is not None:
       simple_opener_director.add_handler(handler())
-
+  # add cookie support
+  simple_opener_director.add_handler(urllib2.HTTPCookieProcessor(cookiejar))  
+ 
   security.declareProtected(Permissions.View, 'proxy')
   def proxy(self, **kw):
     """Proxy a request to a server."""
+    global cookiejar
     if self.REQUEST['REQUEST_METHOD'] != 'GET':
       # XXX this depends on the internal of HTTPRequest.
       pos = self.REQUEST.stdin.tell()
@@ -264,6 +271,15 @@
     if content_type:
       header_dict['Content-Type'] = content_type
 
+    # send locally saved cookies to remote web server
+    if not header_dict.has_key('Cookie'):
+      header_dict['Cookie'] = ''
+    for cookie in cookiejar:
+      # unconditionally send all cookies (no matter if expired or not) as URL is always the same
+      header_dict['Cookie']  +=  '%s=%s;' %(cookie.name, cookie.value)
+    # XXX: include cookies from local browser (like show/hide tabs) which are set directly
+    # by client JavaScript code (i.e. not sent from server)
+    
     request = urllib2.Request(url, data, header_dict)
     f = self.simple_opener_director.open(request)
 
@@ -273,7 +289,6 @@
       response = self.REQUEST.RESPONSE
       response.setStatus(f.code, f.msg)
       response.setHeader('content-type', metadata.getheader('content-type'))
-
       # FIXME this list should be confirmed with the RFC 2616.
       for k in ('location', 'uri', 'cache-control', 'last-modified',
                 'etag', 'if-matched', 'if-none-match',




More information about the Erp5-report mailing list