diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2013-03-03 16:33:50 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2013-03-03 16:33:50 +1300 |
commit | 110a8bb594f9a00585e22e01d69eb6bef6b0d9db (patch) | |
tree | dad80fdd8c74dd5100d7eefe1640f8e875731d58 | |
parent | 155710f9912f0a7370deab2bef6ad0a51ce47f2b (diff) | |
download | mitmproxy-110a8bb594f9a00585e22e01d69eb6bef6b0d9db.tar.gz mitmproxy-110a8bb594f9a00585e22e01d69eb6bef6b0d9db.tar.bz2 mitmproxy-110a8bb594f9a00585e22e01d69eb6bef6b0d9db.zip |
Print pathod craft explanations to stdout.
-rw-r--r-- | libpathod/language.py | 9 | ||||
-rw-r--r-- | libpathod/pathod.py | 9 | ||||
-rw-r--r-- | test/test_language.py | 2 |
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, {}) |