Password replay works for biblio vincennes

This commit is contained in:
Jérôme Schneider 2011-09-01 18:54:15 +02:00
parent 4cf4f02350
commit df2bb7d0e6
6 changed files with 40 additions and 31 deletions

View File

@ -19,7 +19,7 @@ hosts = {
(r'/', Dispatcher('http://www.sfdiabete.org')),
],
'linuxfr.local:8088': [
(r'/', Dispatcher('http://www.linuxfr.org')),
(r'/', Dispatcher('http://linuxfr.org')),
],
'biblio.local:8088': [
(r'/', VincennesBiblioDispatcher('http://biblio.vincennes.fr')),

View File

@ -19,22 +19,21 @@ class BiblioAuthForm(object):
import urllib, httplib
import cookielib
values = { 'user': "754443",
'password': "lecteur",
'password': "XXXXX",
'op': "Se connecter",
'form_id': 'dk_opac15_login_form' }
action = "/sezhame/page/connexion-abonne?destination=user"
url = 'http://biblio.vincennes.fr/sezhame/page/connexion-abonne'
action = "/sezhame/page/connexion-abonne"
#url = 'http://biblio.vincennes.fr/sezhame/page/connexion-abonne'
params = urllib.urlencode(values)
params = 'user=754443&password=lecteur&op=Se+connecter&form_id=dk_opac15_login_form'
headers = { 'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#'Cookie': request.cookies.output(header="")
'Cookie': request.cookies.output(header="", sep=",")
}
conn = httplib.HTTPConnection(self.target.hostname)
conn.request("POST", action, params, headers)
res = conn.getresponse()
#ipdb.set_trace() ########## Breakpoint ##########
return res.getheader('set-cookie')
return res.msg.getheaders('set-cookie')
class VincennesBiblioDispatcher(Dispatcher):
@ -45,20 +44,20 @@ class VincennesBiblioDispatcher(Dispatcher):
def mod_response(self, request, response):
"""
"""
#response.msg = self.filter.response_msg(response.msg)
# response.msg = self.filter.response_msg(response.msg)
if "/sezhame/page/connexion-abonne" in self.env['PATH_INFO']:
if self.auth.is_auth(response):
print "jy souis authentifie"
else:
# TODO: contat toto
setcookies = self.auth.auth(1, request)
print setcookies
import Cookie
response.cookies = Cookie.BaseCookie()
response.cookies.load(setcookies)
print response.cookies.values()
# #import Cookie
#response.cookies = Cookie.BaseCookie()
for setcookie in setcookies:
response.cookies.load(setcookie)
print response.cookies
#print response.cookies.values()
response.cookies = self.filter.response_cookies(response.cookies)
print response.cookies
response.headers = self.filter.response_headers(response.headers)
return response

View File

@ -54,11 +54,14 @@ class MandayeFilter(object):
blacklist = ['transfer-encoding']
for key, value in headers.iteritems():
if key == 'location':
print headers['location']
location = value[0].replace(self.target.hostname,
self.env["HTTP_HOST"])
headers.addheader(key, location)
if key in blacklist:
del headers[key]
print headers['location']
for name in blacklist:
if headers.has_key(name):
del headers[name]
return headers
def response_msg(self, msg):

View File

@ -2,13 +2,20 @@
Default urllib2 handlers for Mandaye
'''
import urllib
import urllib2
import urllib
class MandayeRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(self, req, fp, code, msg, headers):
""" Disable the auto redirect """
infourl = urllib.addinfourl(fp, headers, req.get_full_url())
infourl.code = code
infourl.msg = msg
return infourl
def http_error_302(self, req, fp, code, msg, headers):
""" Disable the auto """
""" Disable the auto redirect """
infourl = urllib.addinfourl(fp, headers, req.get_full_url())
infourl.code = code
infourl.msg = msg

View File

@ -33,11 +33,11 @@ class HTTPHeader(dict):
else:
return None
def getheaders(self, name):
if self.has_key(name):
return self[name]
else:
return None
def getheaders(self):
res = {}
for key, values in self.iteritems():
res[key] = ', '.join(values)
return res
def addsetcookies(self, cookies):
""" cookies: Cookie.SimpleCookie object """

View File

@ -1,7 +1,6 @@
# gevent patching
from gevent import monkey
monkey.patch_all()
#monkey.patch_all()
import Cookie
import config
@ -20,7 +19,7 @@ from mandaye.http import HTTPHeader, HTTPRequest, HTTPResponse
from mandaye.response import _404, _502
# Init poster
opener = poster.streaminghttp.register_openers()
#opener = poster.streaminghttp.register_openers()
class RequestApp(object):
@ -65,6 +64,7 @@ class RequestApp(object):
headers.addheader(name, value)
if self.env.has_key('HTTP_COOKIE'):
print self.env['HTTP_COOKIE']
cookies = Cookie.BaseCookie(self.env['HTTP_COOKIE'])
else:
cookies = Cookie.BaseCookie()
@ -82,14 +82,14 @@ class RequestApp(object):
mrequest = self.dispatcher.mod_request(mrequest)
url = self.dispatcher.get_target_url()
if self.env['REQUEST_METHOD'] == 'POST':
req = urllib2.Request(url, mrequest.msg, mrequest.headers)
data = self.env['wsgi.input'].read()
req = urllib2.Request(url, data, mrequest.headers.getheaders())
else:
req = urllib2.Request(url, headers=mrequest.headers)
req = urllib2.Request(url, headers=mrequest.headers.getheaders())
# Load the cookies
for cookie in mrequest.cookies.values():
req.add_header('cookie', cookie.output(header=""))
req.add_header('cookie', mrequest.cookies.output(sep=',', header=''))
try:
opener = urllib2.build_opener(MandayeRedirectHandler, MandayeErrorHandler)
opener = urllib2.build_opener(MandayeErrorHandler, MandayeRedirectHandler)
response = opener.open(req)
except Exception:
# TODO: enable this only if we are in debug and cleaning the code