Commit af9132c4 authored by Ivan Tyagov's avatar Ivan Tyagov

Add basic cookie support.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@23454 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 98c17643
...@@ -40,7 +40,11 @@ from UserDict import UserDict ...@@ -40,7 +40,11 @@ from UserDict import UserDict
import xmlrpclib, socket, sys, traceback, urllib, urllib2, base64, cgi import xmlrpclib, socket, sys, traceback, urllib, urllib2, base64, cgi
from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager
import zLOG import zLOG
import cookielib
# global (RAM) cookie storage
cookiejar = cookielib.CookieJar()
def _setSuperSecurityManager(self): def _setSuperSecurityManager(self):
""" Change to super user account. """ """ Change to super user account. """
user = self.getWrappedOwner() user = self.getWrappedOwner()
...@@ -207,10 +211,13 @@ class WizardTool(BaseTool): ...@@ -207,10 +211,13 @@ class WizardTool(BaseTool):
handler = getattr(urllib2, name, None) handler = getattr(urllib2, name, None)
if handler is not None: if handler is not None:
simple_opener_director.add_handler(handler()) simple_opener_director.add_handler(handler())
# add cookie support
simple_opener_director.add_handler(urllib2.HTTPCookieProcessor(cookiejar))
security.declareProtected(Permissions.View, 'proxy') security.declareProtected(Permissions.View, 'proxy')
def proxy(self, **kw): def proxy(self, **kw):
"""Proxy a request to a server.""" """Proxy a request to a server."""
global cookiejar
if self.REQUEST['REQUEST_METHOD'] != 'GET': if self.REQUEST['REQUEST_METHOD'] != 'GET':
# XXX this depends on the internal of HTTPRequest. # XXX this depends on the internal of HTTPRequest.
pos = self.REQUEST.stdin.tell() pos = self.REQUEST.stdin.tell()
...@@ -264,6 +271,15 @@ class WizardTool(BaseTool): ...@@ -264,6 +271,15 @@ class WizardTool(BaseTool):
if content_type: if content_type:
header_dict['Content-Type'] = 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) request = urllib2.Request(url, data, header_dict)
f = self.simple_opener_director.open(request) f = self.simple_opener_director.open(request)
...@@ -273,7 +289,6 @@ class WizardTool(BaseTool): ...@@ -273,7 +289,6 @@ class WizardTool(BaseTool):
response = self.REQUEST.RESPONSE response = self.REQUEST.RESPONSE
response.setStatus(f.code, f.msg) response.setStatus(f.code, f.msg)
response.setHeader('content-type', metadata.getheader('content-type')) response.setHeader('content-type', metadata.getheader('content-type'))
# FIXME this list should be confirmed with the RFC 2616. # FIXME this list should be confirmed with the RFC 2616.
for k in ('location', 'uri', 'cache-control', 'last-modified', for k in ('location', 'uri', 'cache-control', 'last-modified',
'etag', 'if-matched', 'if-none-match', 'etag', 'if-matched', 'if-none-match',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment