def test_raw(self): s = StringIO() r = language.parse_pathod("400:b'foo'").next() language.serve(r, s, {}) v = s.getvalue() assert "Content-Length" in v s = StringIO() r = language.parse_pathod("400:b'foo':r").next() language.serve(r, s, {}) v = s.getvalue() assert "Content-Length" not in v
def test_raw(self): s = io.BytesIO() r = next(language.parse_pathod("400:b'foo'")) language.serve(r, s, {}) v = s.getvalue() assert b"Content-Length" in v s = io.BytesIO() r = next(language.parse_pathod("400:b'foo':r")) language.serve(r, s, {}) v = s.getvalue() assert b"Content-Length" not in v
def test_raw(self): s = cStringIO.StringIO() r = language.parse_pathod("400:b'foo'").next() language.serve(r, s, {}) v = s.getvalue() assert "Content-Length" in v s = cStringIO.StringIO() r = language.parse_pathod("400:b'foo':r").next() language.serve(r, s, {}) v = s.getvalue() assert "Content-Length" not in v
def test_raw(self): s = BytesIO() r = next(language.parse_pathod("400:b'foo'")) language.serve(r, s, {}) v = s.getvalue() assert b"Content-Length" in v s = BytesIO() r = next(language.parse_pathod("400:b'foo':r")) language.serve(r, s, {}) v = s.getvalue() assert b"Content-Length" not in v
def websocket_send_frame(self, r): """ Sends a single websocket frame. """ logger = log.ConnectionLogger( self.fp, self.hexdump, False, None, self.wfile if self.showreq else None, ) with logger.ctx() as lg: lg(">> %s" % r) language.serve(r, self.wfile, self.settings) self.wfile.flush()
def http_serve_crafted(self, crafted, logctx): error, crafted = self.server.check_policy(crafted, self.settings) if error: err = self.make_http_error_response(error) language.serve(err, self.wfile, self.settings) return None, dict(type="error", msg=error) if self.server.explain and not hasattr(crafted, 'is_error_response'): crafted = crafted.freeze(self.settings) logctx(">> Spec: %s" % crafted.spec()) response_log = language.serve(crafted, self.wfile, self.settings) if response_log["disconnect"]: return None, response_log return self.handle_http_request, response_log
def test_render_with_body(self): s = StringIO() r = parse_response('200:bfoobar') assert language.serve( r, s, default_settings(), )
def test_render_with_body(self): s = StringIO() r = parse_request("GET:'/foo':bfoobar") assert language.serve( r, s, default_settings(), )
def test_render(self): s = BytesIO() r = parse_request("GET:'/foo'") assert language.serve( r, s, language.Settings(request_host="foo.com") )
def test_render_with_headers(self): s = StringIO() r = parse_request('GET:/foo:h"foo"="bar"') assert language.serve( r, s, default_settings(), )
def test_render_with_headers(self): s = StringIO() r = parse_response('200:h"foo"="bar"') assert language.serve( r, s, default_settings(), )
def test_render(self): s = io.BytesIO() r = parse_request("GET:'/foo'") assert language.serve( r, s, language.Settings(request_host="foo.com") )
def test_render_simple(self): s = StringIO() r = parse_response('200') assert language.serve( r, s, default_settings(), )
def test_render_simple(self): s = StringIO() r = parse_request("GET:'/foo'") assert language.serve( r, s, default_settings(), )
def http(self, r): """ Performs a single request. r: A language.http.Request object, or a string representing one request. Returns Response if we have a non-ignored response. May raise a exceptions.NetlibException """ logger = log.ConnectionLogger( self.fp, self.hexdump, False, self.rfile if self.showresp else None, self.wfile if self.showreq else None, ) with logger.ctx() as lg: lg(">> %s" % r) resp, req = None, None try: req = language.serve(r, self.wfile, self.settings) self.wfile.flush() # build a dummy request to read the reponse # ideally this would be returned directly from language.serve dummy_req = net_http.Request( first_line_format="relative", method=req["method"], scheme=b"http", host=b"localhost", port=80, path=b"/", http_version=b"HTTP/1.1", content=b'', ) resp = self.protocol.read_response(self.rfile, dummy_req) resp.sslinfo = self.sslinfo except exceptions.HttpException as v: lg("Invalid server response: %s" % v) raise except exceptions.TcpTimeout: if self.ignoretimeout: lg("Timeout (ignored)") return None lg("Timeout") raise finally: if resp: lg("<< %s %s: %s bytes" % (resp.status_code, strutils.escape_control_characters(resp.reason) if resp.reason else "", len(resp.content))) if resp.status_code in self.ignorecodes: lg.suppress() return resp
def test_render(self): s = io.BytesIO() r = next(language.parse_pathod("400:m'msg'")) assert language.serve(r, s, {}) r = next(language.parse_pathod("400:p0,100:dr")) assert "p0" in r.spec() s = r.preview_safe() assert "p0" not in s.spec()
def test_render(self): s = BytesIO() r = next(language.parse_pathod("400:m'msg'")) assert language.serve(r, s, {}) r = next(language.parse_pathod("400:p0,100:dr")) assert "p0" in r.spec() s = r.preview_safe() assert "p0" not in s.spec()
def http(self, r): """ Performs a single request. r: A language.http.Request object, or a string representing one request. Returns Response if we have a non-ignored response. May raise a exceptions.NetlibException """ logger = log.ConnectionLogger( self.fp, self.hexdump, False, self.rfile if self.showresp else None, self.wfile if self.showreq else None, ) with logger.ctx() as lg: lg(">> %s" % r) resp, req = None, None try: req = language.serve(r, self.wfile, self.settings) self.wfile.flush() # build a dummy request to read the reponse # ideally this would be returned directly from language.serve dummy_req = net_http.Request( first_line_format="relative", method=req["method"], scheme=b"http", host=b"localhost", port=80, path=b"/", http_version=b"HTTP/1.1", content=b'', ) resp = self.protocol.read_response(self.rfile, dummy_req) resp.sslinfo = self.sslinfo except exceptions.HttpException as v: lg("Invalid server response: %s" % v) raise except exceptions.TcpTimeout: if self.ignoretimeout: lg("Timeout (ignored)") return None lg("Timeout") raise finally: if resp: lg("<< %s %s: %s bytes" % ( resp.status_code, strutils.escape_control_characters(resp.reason) if resp.reason else "", len(resp.content) )) if resp.status_code in self.ignorecodes: lg.suppress() return resp
def http_serve_crafted(self, crafted, logctx): error, crafted = self.server.check_policy( crafted, self.settings ) if error: err = self.make_http_error_response(error) language.serve(err, self.wfile, self.settings) return None, dict( type="error", msg=error ) if self.server.explain and not hasattr(crafted, 'is_error_response'): crafted = crafted.freeze(self.settings) logctx(">> Spec: %s" % crafted.spec()) response_log = language.serve( crafted, self.wfile, self.settings ) if response_log["disconnect"]: return None, response_log return self.handle_http_request, response_log
def http(self, r): """ Performs a single request. r: A language.http.Request object, or a string representing one request. Returns Response if we have a non-ignored response. May raise a exceptions.NetlibException """ logger = log.ConnectionLogger( self.fp, self.hexdump, False, self.rfile if self.showresp else None, self.wfile if self.showreq else None, ) with logger.ctx() as lg: lg(">> %s" % r) resp, req = None, None try: req = language.serve(r, self.wfile, self.settings) self.wfile.flush() resp = self.protocol.read_response( self.rfile, treq(method=req["method"].encode())) resp.sslinfo = self.sslinfo except exceptions.HttpException as v: lg("Invalid server response: %s" % v) raise except exceptions.TcpTimeout: if self.ignoretimeout: lg("Timeout (ignored)") return None lg("Timeout") raise finally: if resp: lg("<< %s %s: %s bytes" % (resp.status_code, strutils.escape_control_characters(resp.reason) if resp.reason else "", len(resp.content))) if resp.status_code in self.ignorecodes: lg.suppress() return resp
def test_write_values_after(): s = io.BytesIO() r = next(language.parse_pathod("400:da")) language.serve(r, s, {}) s = io.BytesIO() r = next(language.parse_pathod("400:pa,0")) language.serve(r, s, {}) s = io.BytesIO() r = next(language.parse_pathod("400:ia,'xx'")) language.serve(r, s, {}) assert s.getvalue().endswith(b'xx')
def http(self, r): """ Performs a single request. r: A language.http.Request object, or a string representing one request. Returns Response if we have a non-ignored response. May raise a exceptions.NetlibException """ logger = log.ConnectionLogger( self.fp, self.hexdump, False, self.rfile if self.showresp else None, self.wfile if self.showreq else None, ) with logger.ctx() as lg: lg(">> %s" % r) resp, req = None, None try: req = language.serve(r, self.wfile, self.settings) self.wfile.flush() resp = self.protocol.read_response(self.rfile, treq(method=req["method"].encode())) resp.sslinfo = self.sslinfo except exceptions.HttpException as v: lg("Invalid server response: %s" % v) raise except exceptions.TcpTimeout: if self.ignoretimeout: lg("Timeout (ignored)") return None lg("Timeout") raise finally: if resp: lg("<< %s %s: %s bytes" % ( resp.status_code, strutils.escape_control_characters(resp.reason) if resp.reason else "", len(resp.content) )) if resp.status_code in self.ignorecodes: lg.suppress() return resp
def test_write_values_after(): s = cStringIO.StringIO() r = language.parse_pathod("400:da").next() language.serve(r, s, {}) s = cStringIO.StringIO() r = language.parse_pathod("400:pa,0").next() language.serve(r, s, {}) s = cStringIO.StringIO() r = language.parse_pathod("400:ia,'xx'").next() language.serve(r, s, {}) assert s.getvalue().endswith('xx')
def handle_websocket(self, logger): while True: with logger.ctx() as lg: started = time.time() try: frm = websockets.Frame.from_file(self.pathod_handler.rfile) except exceptions.NetlibException as e: lg("Error reading websocket frame: %s" % e) return None, None ended = time.time() lg(repr(frm)) retlog = dict( type="inbound", protocol="websockets", started=started, duration=ended - started, frame=dict( ), cipher=None, ) if self.pathod_handler.ssl_established: retlog["cipher"] = self.pathod_handler.get_current_cipher() self.pathod_handler.addlog(retlog) ld = language.websockets.NESTED_LEADER if frm.payload.startswith(ld): nest = frm.payload[len(ld):] try: wf_gen = language.parse_websocket_frame(nest.decode()) except language.exceptions.ParseException as v: logger.write( "Parse error in reflected frame specifcation:" " %s" % v.msg ) return None, None for frm in wf_gen: with logger.ctx() as lg: frame_log = language.serve( frm, self.pathod_handler.wfile, self.pathod_handler.settings ) lg("crafting websocket spec: %s" % frame_log["spec"]) self.pathod_handler.addlog(frame_log) return self.handle_websocket, None
def test_write_values_after(): s = StringIO() r = language.parse_pathod("400:da").next() language.serve(r, s, {}) s = StringIO() r = language.parse_pathod("400:pa,0").next() language.serve(r, s, {}) s = StringIO() r = language.parse_pathod("400:ia,'xx'").next() language.serve(r, s, {}) assert s.getvalue().endswith("xx")
def handle_websocket(self, logger): while True: with logger.ctx() as lg: started = time.time() try: frm = language.websockets_frame.Frame.from_file(self.pathod_handler.rfile) except exceptions.NetlibException as e: lg("Error reading websocket frame: %s" % e) return None, None ended = time.time() lg(repr(frm)) retlog = dict( type="inbound", protocol="websockets", started=started, duration=ended - started, frame=dict( ), cipher=None, ) if self.pathod_handler.tls_established: retlog["cipher"] = self.pathod_handler.get_current_cipher() self.pathod_handler.addlog(retlog) ld = language.websockets.NESTED_LEADER if frm.payload.startswith(ld): nest = frm.payload[len(ld):] try: wf_gen = language.parse_websocket_frame(nest.decode()) except language.exceptions.ParseException as v: logger.write( "Parse error in reflected frame specifcation:" " %s" % v.msg ) return None, None for frm in wf_gen: with logger.ctx() as lg: frame_log = language.serve( frm, self.pathod_handler.wfile, self.pathod_handler.settings ) lg("crafting websocket spec: %s" % frame_log["spec"]) self.pathod_handler.addlog(frame_log)
def test_serve(self): s = BytesIO() r = next(language.parse_pathod("400:i0,'foo'")) assert language.serve(r, s, {})
def test_make_error_response(): d = cStringIO.StringIO() s = http.make_error_response("foo") language.serve(s, d, {})
def test_make_error_response(): d = StringIO() s = http2.make_error_response("foo", "bar") language.serve(s, d, default_settings())
def testlen(x): s = cStringIO.StringIO() x = x.next() language.serve(x, s, language.Settings()) assert x.length(language.Settings()) == len(s.getvalue())
def test_serve(self): s = BytesIO() r = next(parse_pathod("400:i0,'foo'")) assert serve(r, s, {})
def render(r, settings=language.Settings()): r = r.resolve(settings) s = BytesIO() assert language.serve(r, s, settings) return s.getvalue()
def test_serve(self): s = cStringIO.StringIO() r = language.parse_pathod("400:i0,'foo'").next() assert language.serve(r, s, {})
def render(r, settings=language.Settings()): r = r.resolve(settings) s = io.BytesIO() assert language.serve(r, s, settings) return s.getvalue()
def test_serve(self): s = StringIO() r = language.parse_pathod("400:i0,'foo'").next() assert language.serve(r, s, {})
def testlen(x): x = x.next() s = StringIO() m = x.maximum_length({}) language.serve(x, s, {}) assert m >= len(s.getvalue())
def test_serve(self): s = io.BytesIO() r = next(parse_pathod("400:i0,'foo'")) assert serve(r, s, {})
def testlen(x): x = next(x) s = io.BytesIO() m = x.maximum_length({}) language.serve(x, s, {}) assert m >= len(s.getvalue())
def test_make_error_response(): d = io.BytesIO() s = http.make_error_response("foo") language.serve(s, d, {})
def testlen(x): s = StringIO() x = x.next() language.serve(x, s, language.Settings()) assert x.length(language.Settings()) == len(s.getvalue())
def test_make_error_response(): d = BytesIO() s = http.make_error_response("foo") language.serve(s, d, {})
def testlen(x): s = BytesIO() x = next(x) language.serve(x, s, language.Settings()) assert x.length(language.Settings()) == len(s.getvalue())
def testlen(x): x = x.next() s = cStringIO.StringIO() m = x.maximum_length({}) language.serve(x, s, {}) assert m >= len(s.getvalue())
def testlen(x): x = next(x) s = BytesIO() m = x.maximum_length({}) language.serve(x, s, {}) assert m >= len(s.getvalue())
def testlen(x): s = io.BytesIO() x = next(x) language.serve(x, s, language.Settings()) assert x.length(language.Settings()) == len(s.getvalue())