mirror of
https://github.com/sileht/bird-lg.git
synced 2024-12-23 13:04:42 +01:00
+ add blacklist for commands to config
+ custom start page with DEFAULT_TEMPLATE
This commit is contained in:
parent
fa1c071682
commit
ac201314ad
42
lg.py
42
lg.py
|
@ -37,7 +37,7 @@ from toolbox import mask_is_valid, ipv6_is_valid, ipv4_is_valid, resolve, save_c
|
||||||
|
|
||||||
|
|
||||||
import pydot
|
import pydot
|
||||||
from flask import Flask, render_template, jsonify, redirect, session, request, abort, Response, Markup
|
from flask import Flask, render_template, render_template_string, jsonify, redirect, session, request, abort, Response, Markup
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_pyfile('lg.cfg')
|
app.config.from_pyfile('lg.cfg')
|
||||||
|
@ -171,6 +171,8 @@ def inject_commands():
|
||||||
("adv", "show route ..."),
|
("adv", "show route ..."),
|
||||||
("adv_bgpmap", "show route ... (bgpmap)"),
|
("adv_bgpmap", "show route ... (bgpmap)"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
commands = [i for i in commands if i[0] not in app.config.get("BLACKLIST_COMMANDS", [])]
|
||||||
commands_dict = {}
|
commands_dict = {}
|
||||||
for id, text in commands:
|
for id, text in commands:
|
||||||
commands_dict[id] = text
|
commands_dict[id] = text
|
||||||
|
@ -184,6 +186,12 @@ def inject_all_host():
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def hello():
|
def hello():
|
||||||
|
if app.config.get("DEFAULT_TEMPLATE", False):
|
||||||
|
first_command = next(iter(inject_commands()['commands_dict']))
|
||||||
|
set_session(first_command, "+".join(app.config["PROXY"].keys()), "ipv4", "")
|
||||||
|
with open(app.config.get("DEFAULT_TEMPLATE"), 'r') as filehandle:
|
||||||
|
filecontent = filehandle.read()
|
||||||
|
return render_template_string(filecontent)
|
||||||
return redirect("/summary/%s/ipv4" % "+".join(app.config["PROXY"].keys()))
|
return redirect("/summary/%s/ipv4" % "+".join(app.config["PROXY"].keys()))
|
||||||
|
|
||||||
|
|
||||||
|
@ -227,6 +235,8 @@ SUMMARY_UNWANTED_PROTOS = ["Kernel", "Static", "Device"]
|
||||||
@app.route("/summary/<hosts>")
|
@app.route("/summary/<hosts>")
|
||||||
@app.route("/summary/<hosts>/<proto>")
|
@app.route("/summary/<hosts>/<proto>")
|
||||||
def summary(hosts, proto="ipv4"):
|
def summary(hosts, proto="ipv4"):
|
||||||
|
if 'summary' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
set_session("summary", hosts, proto, "")
|
set_session("summary", hosts, proto, "")
|
||||||
command = "show protocols"
|
command = "show protocols"
|
||||||
|
@ -269,6 +279,9 @@ def summary(hosts, proto="ipv4"):
|
||||||
|
|
||||||
@app.route("/detail/<hosts>/<proto>")
|
@app.route("/detail/<hosts>/<proto>")
|
||||||
def detail(hosts, proto):
|
def detail(hosts, proto):
|
||||||
|
if 'detail' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
name = get_query()
|
name = get_query()
|
||||||
|
|
||||||
if not name:
|
if not name:
|
||||||
|
@ -298,6 +311,9 @@ def detail(hosts, proto):
|
||||||
|
|
||||||
@app.route("/traceroute/<hosts>/<proto>")
|
@app.route("/traceroute/<hosts>/<proto>")
|
||||||
def traceroute(hosts, proto):
|
def traceroute(hosts, proto):
|
||||||
|
if 'traceroute' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
q = get_query()
|
q = get_query()
|
||||||
|
|
||||||
if not q:
|
if not q:
|
||||||
|
@ -331,41 +347,65 @@ def traceroute(hosts, proto):
|
||||||
|
|
||||||
@app.route("/adv/<hosts>/<proto>")
|
@app.route("/adv/<hosts>/<proto>")
|
||||||
def show_route_filter(hosts, proto):
|
def show_route_filter(hosts, proto):
|
||||||
|
if 'adv' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("adv", hosts, proto)
|
return show_route("adv", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/adv_bgpmap/<hosts>/<proto>")
|
@app.route("/adv_bgpmap/<hosts>/<proto>")
|
||||||
def show_route_filter_bgpmap(hosts, proto):
|
def show_route_filter_bgpmap(hosts, proto):
|
||||||
|
if 'adv_bgpmap' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("adv_bgpmap", hosts, proto)
|
return show_route("adv_bgpmap", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/where/<hosts>/<proto>")
|
@app.route("/where/<hosts>/<proto>")
|
||||||
def show_route_where(hosts, proto):
|
def show_route_where(hosts, proto):
|
||||||
|
if 'where' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("where", hosts, proto)
|
return show_route("where", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/where_detail/<hosts>/<proto>")
|
@app.route("/where_detail/<hosts>/<proto>")
|
||||||
def show_route_where_detail(hosts, proto):
|
def show_route_where_detail(hosts, proto):
|
||||||
|
if 'where_detail' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("where_detail", hosts, proto)
|
return show_route("where_detail", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/where_bgpmap/<hosts>/<proto>")
|
@app.route("/where_bgpmap/<hosts>/<proto>")
|
||||||
def show_route_where_bgpmap(hosts, proto):
|
def show_route_where_bgpmap(hosts, proto):
|
||||||
|
if 'where_bgpmap' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("where_bgpmap", hosts, proto)
|
return show_route("where_bgpmap", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/prefix/<hosts>/<proto>")
|
@app.route("/prefix/<hosts>/<proto>")
|
||||||
def show_route_for(hosts, proto):
|
def show_route_for(hosts, proto):
|
||||||
|
if 'prefix' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("prefix", hosts, proto)
|
return show_route("prefix", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/prefix_detail/<hosts>/<proto>")
|
@app.route("/prefix_detail/<hosts>/<proto>")
|
||||||
def show_route_for_detail(hosts, proto):
|
def show_route_for_detail(hosts, proto):
|
||||||
|
if 'prefix_detail' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("prefix_detail", hosts, proto)
|
return show_route("prefix_detail", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/prefix_bgpmap/<hosts>/<proto>")
|
@app.route("/prefix_bgpmap/<hosts>/<proto>")
|
||||||
def show_route_for_bgpmap(hosts, proto):
|
def show_route_for_bgpmap(hosts, proto):
|
||||||
|
if 'prefix_bgpmap' not in iter(inject_commands()['commands_dict']):
|
||||||
|
return render_template('error.html', errors=["Access denied"]), 403
|
||||||
|
|
||||||
return show_route("prefix_bgpmap", hosts, proto)
|
return show_route("prefix_bgpmap", hosts, proto)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue