aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/web/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/web/app.py')
-rw-r--r--libmproxy/web/app.py62
1 files changed, 51 insertions, 11 deletions
diff --git a/libmproxy/web/app.py b/libmproxy/web/app.py
index 8598acf5..9582d97b 100644
--- a/libmproxy/web/app.py
+++ b/libmproxy/web/app.py
@@ -26,6 +26,12 @@ class RequestHandler(tornado.web.RequestHandler):
)
@property
+ def json(self):
+ if not self.request.headers.get("Content-Type").startswith("application/json"):
+ return None
+ return json.loads(self.request.body)
+
+ @property
def state(self):
return self.application.master.state
@@ -111,6 +117,42 @@ class FlowHandler(RequestHandler):
self.flow.kill(self.master)
self.state.delete_flow(self.flow)
+ def put(self, flow_id):
+ flow = self.flow
+ flow.backup()
+ for a, b in self.json.iteritems():
+
+ if a == "request":
+ request = flow.request
+ for k, v in b.iteritems():
+ if k in ["method", "scheme", "host", "path"]:
+ setattr(request, k, str(v))
+ elif k == "port":
+ request.port = int(v)
+ elif k == "httpversion":
+ request.httpversion = tuple(int(x) for x in v)
+ elif k == "headers":
+ request.headers.load_state(v)
+ else:
+ print "Warning: Unknown update {}.{}: {}".format(a, k, v)
+
+ elif a == "response":
+ response = flow.response
+ for k, v in b.iteritems():
+ if k == "msg":
+ response.msg = str(v)
+ elif k == "code":
+ response.code = int(v)
+ elif k == "httpversion":
+ response.httpversion = tuple(int(x) for x in v)
+ elif k == "headers":
+ response.headers.load_state(v)
+ else:
+ print "Warning: Unknown update {}.{}: {}".format(a, k, v)
+ else:
+ print "Warning: Unknown update {}: {}".format(a, b)
+ self.state.update_flow(flow)
+
class DuplicateFlow(RequestHandler):
def post(self, flow_id):
@@ -124,6 +166,10 @@ class RevertFlow(RequestHandler):
class ReplayFlow(RequestHandler):
def post(self, flow_id):
+ self.flow.backup()
+ self.flow.response = None
+ self.state.update_flow(self.flow)
+
r = self.master.replay_request(self.flow)
if r:
raise APIError(400, r)
@@ -176,18 +222,12 @@ class Settings(RequestHandler):
)
))
- def put(self, *update, **kwargs):
+ def put(self):
update = {}
- for k, v in self.request.arguments.iteritems():
- if len(v) != 1:
- print "Warning: Unknown length for setting {}: {}".format(k, v)
- continue
-
- if k == "_xsrf":
- continue
- elif k == "intercept":
- self.state.set_intercept(v[0])
- update[k] = v[0]
+ for k, v in self.json.iteritems():
+ if k == "intercept":
+ self.state.set_intercept(v)
+ update[k] = v
else:
print "Warning: Unknown setting {}: {}".format(k, v)