mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 18:18:25 +00:00
Basic anchor adding.
This commit is contained in:
parent
7ca5c7ae90
commit
2d88d88f8c
@ -37,10 +37,8 @@ class Log(_Page):
|
|||||||
|
|
||||||
|
|
||||||
class Pathod(object):
|
class Pathod(object):
|
||||||
anchor = "/p/"
|
def __init__(self, spec, application, request, **settings):
|
||||||
def __init__(self, application, request, **settings):
|
|
||||||
self.application, self.request, self.settings = application, request, settings
|
self.application, self.request, self.settings = application, request, settings
|
||||||
spec = urllib.unquote(self.request.uri)[len(self.anchor):]
|
|
||||||
try:
|
try:
|
||||||
self.response = rparse.parse(self.settings, spec)
|
self.response = rparse.parse(self.settings, spec)
|
||||||
except rparse.ParseException, v:
|
except rparse.ParseException, v:
|
||||||
@ -53,9 +51,17 @@ class Pathod(object):
|
|||||||
self.response.render(self.request)
|
self.response.render(self.request)
|
||||||
|
|
||||||
|
|
||||||
|
class RequestPathod(Pathod):
|
||||||
|
anchor = "/p/"
|
||||||
|
def __init__(self, application, request, **settings):
|
||||||
|
spec = urllib.unquote(request.uri)[len(self.anchor):]
|
||||||
|
Pathod.__init__(self, spec, application, request, **settings)
|
||||||
|
|
||||||
|
|
||||||
class PathodApp(tornado.web.Application):
|
class PathodApp(tornado.web.Application):
|
||||||
def __init__(self, **settings):
|
def __init__(self, **settings):
|
||||||
self.templates = tornado.template.Loader(utils.data.path("templates"))
|
self.templates = tornado.template.Loader(utils.data.path("templates"))
|
||||||
|
self.appsettings = settings
|
||||||
tornado.web.Application.__init__(
|
tornado.web.Application.__init__(
|
||||||
self,
|
self,
|
||||||
[
|
[
|
||||||
@ -63,13 +69,37 @@ class PathodApp(tornado.web.Application):
|
|||||||
(r"/log", Log),
|
(r"/log", Log),
|
||||||
(r"/help", Help),
|
(r"/help", Help),
|
||||||
(r"/preview", Preview),
|
(r"/preview", Preview),
|
||||||
(r"/p/.*", Pathod, settings),
|
(r"/p/.*", RequestPathod, settings),
|
||||||
],
|
],
|
||||||
static_path = utils.data.path("static"),
|
static_path = utils.data.path("static"),
|
||||||
template_path = utils.data.path("templates"),
|
template_path = utils.data.path("templates"),
|
||||||
debug=True
|
debug=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def add_anchor(self, pattern, spec):
|
||||||
|
"""
|
||||||
|
Anchors are added to the beginning of the handlers.
|
||||||
|
"""
|
||||||
|
# We assume we have only one host...
|
||||||
|
l = self.handlers[0][1]
|
||||||
|
class FixedPathod(Pathod):
|
||||||
|
def __init__(self, application, request, **settings):
|
||||||
|
Pathod.__init__(self, spec, application, request, **settings)
|
||||||
|
FixedPathod.spec = spec
|
||||||
|
l.insert(0, tornado.web.URLSpec(pattern, FixedPathod, self.appsettings))
|
||||||
|
|
||||||
|
def get_anchors(self, pattern, spec):
|
||||||
|
"""
|
||||||
|
Anchors are added to the beginning of the handlers.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def remove_anchor(self, pattern, spec):
|
||||||
|
"""
|
||||||
|
Anchors are added to the beginning of the handlers.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
# begin nocover
|
# begin nocover
|
||||||
def run(application, port, ssl_options):
|
def run(application, port, ssl_options):
|
||||||
|
@ -1,4 +1,27 @@
|
|||||||
import copy, os
|
import copy, os, re
|
||||||
|
import rparse
|
||||||
|
|
||||||
|
class AnchorError(Exception): pass
|
||||||
|
|
||||||
|
def parse_anchor_spec(s, settings):
|
||||||
|
"""
|
||||||
|
For now, this is very simple, and you can't have an '=' in your regular
|
||||||
|
expression.
|
||||||
|
"""
|
||||||
|
if not "=" in s:
|
||||||
|
raise AnchorError("Invalid anchor definition: %s"%s)
|
||||||
|
rex, spec = s.split("=", 1)
|
||||||
|
try:
|
||||||
|
re.compile(rex)
|
||||||
|
except re.error:
|
||||||
|
raise AnchorError("Invalid regex in anchor: %s"%s)
|
||||||
|
try:
|
||||||
|
rparse.parse(settings, spec)
|
||||||
|
except rparse.ParseException, v:
|
||||||
|
raise AnchorError("Invalid page spec in anchor: '%s', %s"%(s, str(v)))
|
||||||
|
|
||||||
|
return rex, spec
|
||||||
|
|
||||||
|
|
||||||
class Data:
|
class Data:
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
|
19
pathod
19
pathod
@ -1,11 +1,15 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import argparse
|
import argparse, sys
|
||||||
from libpathod import app, utils
|
from libpathod import app, utils
|
||||||
import tornado.ioloop
|
import tornado.ioloop
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Process some integers.')
|
parser = argparse.ArgumentParser(description='Process some integers.')
|
||||||
parser.add_argument("-p", dest='port', default=8888, type=int, help='Port.')
|
parser.add_argument("-p", dest='port', default=8888, type=int, help='Port.')
|
||||||
|
parser.add_argument(
|
||||||
|
"-a", dest='anchors', default=[], type=str, action="append",
|
||||||
|
help='Add an anchor. Specified as a string with the form pattern=pagespec'
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-d", dest='staticdir', default=None, type=str,
|
"-d", dest='staticdir', default=None, type=str,
|
||||||
help='Directory for static files.'
|
help='Directory for static files.'
|
||||||
@ -26,10 +30,17 @@ if __name__ == "__main__":
|
|||||||
help='SSL cert file. If not specified, a default cert is used.'
|
help='SSL cert file. If not specified, a default cert is used.'
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
settings = dict(
|
||||||
|
staticdir=args.staticdir
|
||||||
|
)
|
||||||
|
application = app.PathodApp(**settings)
|
||||||
|
for i in args.anchors:
|
||||||
|
try:
|
||||||
|
rex, spec = utils.parse_anchor_spec(i, settings)
|
||||||
|
except utils.AnchorError, v:
|
||||||
|
parser.error(str(v))
|
||||||
|
application.add_anchor(rex, spec)
|
||||||
|
|
||||||
application = app.PathodApp(
|
|
||||||
staticdir=args.staticdir
|
|
||||||
)
|
|
||||||
if args.ssl:
|
if args.ssl:
|
||||||
ssl = dict(
|
ssl = dict(
|
||||||
keyfile = args.ssl_keyfile or utils.data.path("resources/server.key"),
|
keyfile = args.ssl_keyfile or utils.data.path("resources/server.key"),
|
||||||
|
@ -2,8 +2,14 @@ import libpry
|
|||||||
from libpathod import app
|
from libpathod import app
|
||||||
from tornado import httpserver
|
from tornado import httpserver
|
||||||
|
|
||||||
|
|
||||||
class uApplication(libpry.AutoTree):
|
class uApplication(libpry.AutoTree):
|
||||||
|
def test_anchors(self):
|
||||||
|
a = app.PathodApp(staticdir=None)
|
||||||
|
a.add_anchor("/foo", "200")
|
||||||
|
assert a.handlers[0][1][0].handler_class.__name__ == "FixedPathod"
|
||||||
|
|
||||||
|
|
||||||
|
class uPages(libpry.AutoTree):
|
||||||
def dummy_page(self, path):
|
def dummy_page(self, path):
|
||||||
# A hideous, hideous kludge, but Tornado seems to have no more sensible
|
# A hideous, hideous kludge, but Tornado seems to have no more sensible
|
||||||
# way to do this.
|
# way to do this.
|
||||||
@ -15,9 +21,6 @@ class uApplication(libpry.AutoTree):
|
|||||||
del r.connection
|
del r.connection
|
||||||
return klass(a, r)
|
return klass(a, r)
|
||||||
|
|
||||||
def test_create(self):
|
|
||||||
assert app.PathodApp(staticdir=None)
|
|
||||||
|
|
||||||
def test_index(self):
|
def test_index(self):
|
||||||
page = self.dummy_page("/")
|
page = self.dummy_page("/")
|
||||||
page.get()
|
page.get()
|
||||||
@ -31,5 +34,6 @@ class uApplication(libpry.AutoTree):
|
|||||||
|
|
||||||
|
|
||||||
tests = [
|
tests = [
|
||||||
uApplication()
|
uApplication(),
|
||||||
|
uPages()
|
||||||
]
|
]
|
||||||
|
@ -2,7 +2,13 @@ import libpry
|
|||||||
from libpathod import utils
|
from libpathod import utils
|
||||||
|
|
||||||
|
|
||||||
|
class uparse_anchor_spec(libpry.AutoTree):
|
||||||
|
def test_simple(self):
|
||||||
|
assert utils.parse_anchor_spec("foo=200", {}) == ("foo", "200")
|
||||||
|
libpry.raises(utils.AnchorError, utils.parse_anchor_spec, "*=200", {})
|
||||||
|
libpry.raises(utils.AnchorError, utils.parse_anchor_spec, "foo=bar", {})
|
||||||
|
|
||||||
|
|
||||||
tests = [
|
tests = [
|
||||||
|
uparse_anchor_spec()
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user