aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2013-03-03 16:33:50 +1300
committerAldo Cortesi <aldo@nullcube.com>2013-03-03 16:33:50 +1300
commit110a8bb594f9a00585e22e01d69eb6bef6b0d9db (patch)
treedad80fdd8c74dd5100d7eefe1640f8e875731d58
parent155710f9912f0a7370deab2bef6ad0a51ce47f2b (diff)
downloadmitmproxy-110a8bb594f9a00585e22e01d69eb6bef6b0d9db.tar.gz
mitmproxy-110a8bb594f9a00585e22e01d69eb6bef6b0d9db.tar.bz2
mitmproxy-110a8bb594f9a00585e22e01d69eb6bef6b0d9db.zip
Print pathod craft explanations to stdout.
-rw-r--r--libpathod/language.py9
-rw-r--r--libpathod/pathod.py9
-rw-r--r--test/test_language.py2
3 files changed, 12 insertions, 8 deletions
diff --git a/libpathod/language.py b/libpathod/language.py
index 6aae7dc7..f3fe4daa 100644
--- a/libpathod/language.py
+++ b/libpathod/language.py
@@ -930,15 +930,18 @@ class Request(_Message):
return ":".join([i.spec() for i in self.tokens])
-def PathodErrorResponse(reason, body=None):
+class PathodErrorResponse(Response):
+ pass
+
+
+def make_error_response(reason, body=None):
tokens = [
Code("800"),
Header(ValueLiteral("Content-Type"), ValueLiteral("text/plain")),
Reason(ValueLiteral(reason)),
Body(ValueLiteral("pathod error: " + (body or reason))),
]
- return Response(tokens)
-
+ return PathodErrorResponse(tokens)
FILESTART = "+"
def read_file(settings, s):
diff --git a/libpathod/pathod.py b/libpathod/pathod.py
index 31a126b7..4d8a0203 100644
--- a/libpathod/pathod.py
+++ b/libpathod/pathod.py
@@ -27,7 +27,7 @@ class PathodHandler(tcp.BaseHandler):
def serve_crafted(self, crafted, request_log):
c = self.server.check_policy(crafted, self.server.request_settings)
if c:
- err = language.PathodErrorResponse(c)
+ err = language.make_error_response(c)
language.serve(err, self.wfile, self.server.request_settings)
log = dict(
type = "error",
@@ -35,8 +35,9 @@ class PathodHandler(tcp.BaseHandler):
)
return False, log
- if self.server.explain:
+ if self.server.explain and not isinstance(crafted, language.PathodErrorResponse):
crafted = crafted.freeze(self.server.request_settings, None)
+ self.info(">> Spec: %s"%crafted.spec())
response_log = language.serve(crafted, self.wfile, self.server.request_settings, None)
log = dict(
type = "crafted",
@@ -140,13 +141,13 @@ class PathodHandler(tcp.BaseHandler):
crafted = language.parse_response(self.server.request_settings, spec)
except language.ParseException, v:
self.info("Parse error: %s"%v.msg)
- crafted = language.PathodErrorResponse(
+ crafted = language.make_error_response(
"Parse Error",
"Error parsing response spec: %s\n"%v.msg + v.marked()
)
return self.serve_crafted(crafted, request_log)
elif self.server.noweb:
- crafted = language.PathodErrorResponse("Access Denied")
+ crafted = language.make_error_response("Access Denied")
language.serve(crafted, self.wfile, self.server.request_settings)
return False, dict(type = "error", msg="Access denied: web interface disabled")
else:
diff --git a/test/test_language.py b/test/test_language.py
index 409b0eb6..40967935 100644
--- a/test/test_language.py
+++ b/test/test_language.py
@@ -241,7 +241,7 @@ class TestMisc:
def test_internal_response(self):
d = cStringIO.StringIO()
- s = language.PathodErrorResponse("foo")
+ s = language.make_error_response("foo")
language.serve(s, d, {})