Merge branch 'master' of github.com:cortesi/mitmproxy

This commit is contained in:
Aldo Cortesi 2011-09-04 10:51:09 +12:00
commit 4cb0e5bfb4
2 changed files with 24 additions and 6 deletions

View File

@ -0,0 +1,9 @@
import Image, cStringIO
def response(context, flow):
if flow.response.headers["content-type"] == ["image/png"]:
s = cStringIO.StringIO(flow.response.content)
img = Image.open(s)
img = img.rotate(180)
s2 = cStringIO.StringIO()
img.save(s2, "png")
flow.response.content = s2.getvalue()

View File

@ -759,6 +759,13 @@ class StickyCookieState:
m["path"] or "/" m["path"] or "/"
) )
def domain_match(self, a, b):
if cookielib.domain_match(a, b):
return True
elif cookielib.domain_match(a, b.strip(".")):
return True
return False
def handle_response(self, f): def handle_response(self, f):
for i in f.response.headers["set-cookie"]: for i in f.response.headers["set-cookie"]:
# FIXME: We now know that Cookie.py screws up some cookies with # FIXME: We now know that Cookie.py screws up some cookies with
@ -766,21 +773,22 @@ class StickyCookieState:
c = Cookie.SimpleCookie(str(i)) c = Cookie.SimpleCookie(str(i))
m = c.values()[0] m = c.values()[0]
k = self.ckey(m, f) k = self.ckey(m, f)
if cookielib.domain_match(f.request.host, k[0]): if self.domain_match(f.request.host, k[0]):
self.jar[self.ckey(m, f)] = m self.jar[self.ckey(m, f)] = m
def handle_request(self, f): def handle_request(self, f):
l = []
if f.match(self.flt): if f.match(self.flt):
for i in self.jar.keys(): for i in self.jar.keys():
match = [ match = [
cookielib.domain_match(i[0], f.request.host), self.domain_match(f.request.host, i[0]),
f.request.port == i[1], f.request.port == i[1],
f.request.path.startswith(i[2]) f.request.path.startswith(i[2])
] ]
if all(match): if all(match):
l = f.request.headers["cookie"]
f.request.stickycookie = True
l.append(self.jar[i].output(header="").strip()) l.append(self.jar[i].output(header="").strip())
if l:
f.request.stickycookie = True
f.request.headers["cookie"] = l f.request.headers["cookie"] = l
@ -1304,6 +1312,7 @@ class FlowMaster(controller.Master):
self.client_playback.clear(f) self.client_playback.clear(f)
if not f: if not f:
r._ack() r._ack()
if f:
self.process_new_response(f) self.process_new_response(f)
return f return f