mitmproxy/libpathod/app.py

97 lines
2.2 KiB
Python
Raw Normal View History

import logging, pprint, cStringIO
from flask import Flask, jsonify, render_template, request, abort
2012-07-23 04:39:25 +00:00
import version, rparse, utils
2012-06-21 04:25:27 +00:00
logging.basicConfig(level="DEBUG")
2012-06-19 04:57:57 +00:00
app = Flask(__name__)
2012-06-19 01:23:07 +00:00
def api():
@app.route('/api/info')
def api_info():
return jsonify(
version = version.IVERSION
)
2012-06-19 04:57:57 +00:00
@app.route('/api/log')
def api_log():
return jsonify(
log = app.config["pathod"].get_log()
)
2012-06-19 01:23:07 +00:00
@app.route('/api/clear_log')
def api_clear_log():
app.config["pathod"].clear_log()
return "OK"
2012-06-19 01:23:07 +00:00
2012-07-24 10:27:04 +00:00
def render(s, **kwargs):
kwargs["noapi"] = app.config["pathod"].noapi
return render_template(s, **kwargs)
2012-06-21 04:25:27 +00:00
@app.route('/')
@app.route('/index.html')
def index():
2012-07-24 10:27:04 +00:00
return render("index.html", section="main")
2012-06-28 23:53:59 +00:00
@app.route('/docs/pathod')
def docs_pathod():
2012-07-24 10:27:04 +00:00
return render("docs_pathod.html", section="docs")
2012-06-28 23:53:59 +00:00
2012-07-22 10:24:16 +00:00
@app.route('/docs/language')
def docs_language():
2012-07-24 10:27:04 +00:00
return render("docs_lang.html", section="docs")
2012-07-22 10:24:16 +00:00
2012-06-28 23:53:59 +00:00
@app.route('/docs/pathoc')
def docs_pathoc():
2012-07-24 10:27:04 +00:00
return render("docs_pathoc.html", section="docs")
2012-06-28 23:53:59 +00:00
@app.route('/docs/test')
def docs_test():
2012-07-24 10:27:04 +00:00
return render("docs_test.html", section="docs")
2012-06-23 23:14:54 +00:00
@app.route('/log')
def log():
2012-07-24 10:27:04 +00:00
if app.config["pathod"].noapi:
abort(404)
return render("log.html", section="log", log=app.config["pathod"].get_log())
2012-06-23 23:14:54 +00:00
2012-06-21 04:25:27 +00:00
@app.route('/log/<int:lid>')
def onelog(lid):
item = app.config["pathod"].log_by_id(int(lid))
if not item:
abort(404)
l = pprint.pformat(item)
2012-07-24 10:27:04 +00:00
return render("onelog.html", section="log", alog=l, lid=lid)
2012-06-21 04:25:27 +00:00
@app.route('/preview')
def preview():
spec = request.args["spec"]
args = dict(
spec = spec,
section = "main",
syntaxerror = None,
error = None
)
try:
2012-06-26 03:09:05 +00:00
r = rparse.parse_response(app.config["pathod"].request_settings, spec)
except rparse.ParseException, v:
args["syntaxerror"] = str(v)
args["marked"] = v.marked()
2012-07-24 10:27:04 +00:00
return render("preview.html", **args)
s = cStringIO.StringIO()
r.preview_safe()
r.serve(s, check=app.config["pathod"].check_size)
2012-07-23 04:39:25 +00:00
args["output"] = utils.escape_unprintables(s.getvalue())
2012-07-24 10:27:04 +00:00
return render("preview.html", **args)