Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
 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()
Example #6
0
    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
Example #7
0
 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 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(),
     )
Example #10
0
 def test_render(self):
     s = BytesIO()
     r = parse_request("GET:'/foo'")
     assert language.serve(
         r,
         s,
         language.Settings(request_host="foo.com")
     )
Example #11
0
 def test_render_with_headers(self):
     s = StringIO()
     r = parse_request('GET:/foo:h"foo"="bar"')
     assert language.serve(
         r,
         s,
         default_settings(),
     )
Example #12
0
 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_with_body(self):
     s = StringIO()
     r = parse_request("GET:'/foo':bfoobar")
     assert language.serve(
         r,
         s,
         default_settings(),
     )
 def test_render_with_headers(self):
     s = StringIO()
     r = parse_request('GET:/foo:h"foo"="bar"')
     assert language.serve(
         r,
         s,
         default_settings(),
     )
Example #15
0
 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_with_body(self):
     s = StringIO()
     r = parse_response('200:bfoobar')
     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(),
     )
Example #19
0
 def test_render_simple(self):
     s = StringIO()
     r = parse_request("GET:'/foo'")
     assert language.serve(
         r,
         s,
         default_settings(),
     )
Example #20
0
 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(),
     )
Example #22
0
    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
Example #23
0
    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()
Example #24
0
    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()
Example #25
0
    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
Example #26
0
    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
Example #27
0
    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')
Example #29
0
    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
Example #30
0
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')
Example #31
0
 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
Example #32
0
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 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")
Example #34
0
 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, {})
Example #36
0
def test_make_error_response():
    d = cStringIO.StringIO()
    s = http.make_error_response("foo")
    language.serve(s, d, {})
Example #37
0
def test_make_error_response():
    d = StringIO()
    s = http2.make_error_response("foo", "bar")
    language.serve(s, d, default_settings())
def test_make_error_response():
    d = StringIO()
    s = http2.make_error_response("foo", "bar")
    language.serve(s, d, default_settings())
Example #39
0
 def testlen(x):
     s = cStringIO.StringIO()
     x = x.next()
     language.serve(x, s, language.Settings())
     assert x.length(language.Settings()) == len(s.getvalue())
Example #40
0
 def test_serve(self):
     s = BytesIO()
     r = next(parse_pathod("400:i0,'foo'"))
     assert serve(r, s, {})
Example #41
0
def render(r, settings=language.Settings()):
    r = r.resolve(settings)
    s = BytesIO()
    assert language.serve(r, s, settings)
    return s.getvalue()
Example #42
0
 def test_serve(self):
     s = cStringIO.StringIO()
     r = language.parse_pathod("400:i0,'foo'").next()
     assert language.serve(r, s, {})
Example #43
0
def render(r, settings=language.Settings()):
    r = r.resolve(settings)
    s = io.BytesIO()
    assert language.serve(r, s, settings)
    return s.getvalue()
Example #44
0
 def test_serve(self):
     s = StringIO()
     r = language.parse_pathod("400:i0,'foo'").next()
     assert language.serve(r, s, {})
Example #45
0
 def testlen(x):
     x = x.next()
     s = StringIO()
     m = x.maximum_length({})
     language.serve(x, s, {})
     assert m >= len(s.getvalue())
Example #46
0
 def test_serve(self):
     s = io.BytesIO()
     r = next(parse_pathod("400:i0,'foo'"))
     assert serve(r, s, {})
Example #47
0
 def testlen(x):
     x = next(x)
     s = io.BytesIO()
     m = x.maximum_length({})
     language.serve(x, s, {})
     assert m >= len(s.getvalue())
Example #48
0
def test_make_error_response():
    d = io.BytesIO()
    s = http.make_error_response("foo")
    language.serve(s, d, {})
Example #49
0
 def test_serve(self):
     s = BytesIO()
     r = next(language.parse_pathod("400:i0,'foo'"))
     assert language.serve(r, s, {})
Example #50
0
 def testlen(x):
     s = StringIO()
     x = x.next()
     language.serve(x, s, language.Settings())
     assert x.length(language.Settings()) == len(s.getvalue())
Example #51
0
def test_make_error_response():
    d = BytesIO()
    s = http.make_error_response("foo")
    language.serve(s, d, {})
Example #52
0
def test_make_error_response():
    d = cStringIO.StringIO()
    s = http.make_error_response("foo")
    language.serve(s, d, {})
Example #53
0
 def testlen(x):
     s = BytesIO()
     x = next(x)
     language.serve(x, s, language.Settings())
     assert x.length(language.Settings()) == len(s.getvalue())
Example #54
0
 def testlen(x):
     x = x.next()
     s = cStringIO.StringIO()
     m = x.maximum_length({})
     language.serve(x, s, {})
     assert m >= len(s.getvalue())
Example #55
0
 def testlen(x):
     x = next(x)
     s = BytesIO()
     m = x.maximum_length({})
     language.serve(x, s, {})
     assert m >= len(s.getvalue())
Example #56
0
 def testlen(x):
     s = io.BytesIO()
     x = next(x)
     language.serve(x, s, language.Settings())
     assert x.length(language.Settings()) == len(s.getvalue())