From a04d17e766a026efcb60d77b199bef1794dea2b1 Mon Sep 17 00:00:00 2001 From: lare Date: Mon, 21 Nov 2022 19:41:28 +0100 Subject: [PATCH] add example-configs and form on peering/new --- web/backend/config.sample.json | 3 +- web/backend/main.py | 27 +++++++---- web/frontend/peerings-new.html | 83 +++++++++++++++++++++++++++++++--- web/frontend/peerings.html | 7 ++- web/frontend/static/style.css | 17 +++++++ 5 files changed, 118 insertions(+), 19 deletions(-) diff --git a/web/backend/config.sample.json b/web/backend/config.sample.json index b2a9a3d..aa7a872 100644 --- a/web/backend/config.sample.json +++ b/web/backend/config.sample.json @@ -1,7 +1,7 @@ { "nodes": { "": { - "pub-endpoint": "", //optional, recommended, default: None/null + "endpoint": "", //optional, recommended, default: None/null "api-con": "http://:/", // required "#comment": "/* from here: data to be displayed on the webinterface */", "country": "...", // Countrycode: 2 capital letters @@ -16,6 +16,7 @@ } }, "MNT": "YOUR-MNT", // your MNT tag + "ASN": "424242000", //Your ASN (used to generate default peer ListenPorts) "listen": "0.0.0.0", "port": 8042, "domain": "example.org", // domain to use for kioubit verification service diff --git a/web/backend/main.py b/web/backend/main.py index 08ac158..5eaf57f 100644 --- a/web/backend/main.py +++ b/web/backend/main.py @@ -91,6 +91,7 @@ class PeeringManager(dict): json.dump(self._peerings, p, indent=4) def get_peerings_by_mnt(self, mnt): + return [{}] raise NotImplementedError() @@ -143,6 +144,10 @@ def login(): return render_template("login.html", session=session, config=config, return_addr=session["return_url"]) elif request.method == "POST" and config["debug-mode"]: try: + print(request.form) + if request.form["theanswer"] != "42": + msg = "what is the answer for everything?" + return render_template("login.html", session=session,config=config,return_addr=session["return_url"], msg=msg) mnt = request.form["mnt"] asn = request.form["asn"] asn = asn[2:] if asn[:1].lower() == "as" else asn @@ -175,17 +180,23 @@ def peerings_delete(): @app.route("/peerings/new", methods=["GET","POST"]) @auth_required() def peerings_new(): - return render_template("peerings-new.html", session=session,config=config) - - return f"{request.method} /peerings/new {str(request.args)}{str(request.form)}" + if request.method == "GET": + print(session) + if "node" in request.args and request.args["node"] in config["nodes"]: + return render_template("peerings-new.html", config=config, selected_node=request.args["node"], peerings=peerings) + else: + return render_template("peerings-new.html", session=session,config=config, peerings=peerings) + elif request.method == "POST": + return """
creating peerings is not (yet) implemented
return""" + return f"{request.method} /peerings/new {str(request.args)}{str(request.form)}" @app.route("/peerings", methods=["GET","POST","DELETE"]) @auth_required() -def peerings(): +def peerings_view(): if request.method == "GET": if "node" in request.args and request.args["node"] in config["nodes"]: - return render_template("peerings.html", config=config, selected_node=request.args["node"]) + return render_template("peerings.html", config=config, selected_node=request.args["node"], peerings=peerings) else: - return render_template("peerings.html", session=session,config=config) + return render_template("peerings.html", session=session,config=config, peerings=peerings) elif request.method == "POST": return peerings_new() elif request.method == "DELETE": @@ -205,11 +216,11 @@ def main(): app.template_folder=config["flask-template-dir"] app.secret_key = config["flask-secret-key"] if "production" in config and config["production"] == False: - logging.getLogger(__name__).setLevel(logging.INFO) + logging.getLogger(__name__).setLevel(0) app.run(host=config["listen"], port=config["port"], debug=config["debug-mode"], threaded=True) else: from waitress import serve - logging.getLogger(__name__).setLevel(logging.NOTSET) + logging.getLogger(__name__).setLevel(logging.INFO) serve(app, host=config["listen"], port=config["port"]) diff --git a/web/frontend/peerings-new.html b/web/frontend/peerings-new.html index ffdba39..99b1cd9 100644 --- a/web/frontend/peerings-new.html +++ b/web/frontend/peerings-new.html @@ -1,13 +1,84 @@ {% extends 'base.html' %} {% block content %} + -
- +
+ {% for node in config["nodes"] %} + + + + {% endfor %} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

wg-quick:

+
+ + [Interface]
+ PrivateKey = <your private key>
+ ListenPort = 2{{config["ASN"][-4:]}}
+ PostUp = ip address add .../32 peer {% if selected_node %}{{config["nodes"][selected_node]["internal-v4"]}} {% else %} ... {% endif %}
+ PostUp = ip address add .../128 peer {% if selected_node %}{{config["nodes"][selected_node]["internal-v6"]}} {% else %} ... {% endif %}
+ PostUp = ip address add .../128 peer {% if selected_node %}{{config["nodes"][selected_node]["internal-v6ll"]}} {% else %} ... {% endif %}
+ Table = off
+
+ [Peer]
+ PublicKey = {% if selected_node %}{{config["nodes"][selected_node]["wg-key"]}}{% else %} ... {% endif %}
+ Endpoint = {% if selected_node %}{{config["nodes"][selected_node]["endpoint"]}}{% else %} ... {% endif %}:{% if selected_node %}{% if session["user-data"]["asn"].startswith("AS424242") %}5{{session["user-data"]["asn"][-4:]}}{% else %} ... {% endif %}{% else %} ... {% endif %}
+ AllowedIPs = {% if selected_node %}{{config["nodes"][selected_node]["internal-v6ll"]}} {% else %} ... {% endif %},172.20.0.0/14,172.31.0.0/16,10.0.0.0/8,fd00::/8
+
+
+ +

bird(2) config:

+
+ + protocol bgp dn42_{{config["MNT"][:-4].lower()}} from dnpeers {
+ neighbor {% if selected_node %}{{config["nodes"][selected_node]["internal-v6ll"]}} {% else %} ... {% endif %} as {{config["ASN"]}};
+ interface "dn42_{{config["MNT"][:-4].lower()}}";
+ }
+
+
+
{% endblock %} \ No newline at end of file diff --git a/web/frontend/peerings.html b/web/frontend/peerings.html index 578194b..d2ffe75 100644 --- a/web/frontend/peerings.html +++ b/web/frontend/peerings.html @@ -1,14 +1,13 @@ {% extends 'base.html' %} {% block content %} -
- +{% for peering in peerings.get_peerings_by_mnt(session["login"]) %} + {{peering}}
+{% endfor %}
{% endblock %} \ No newline at end of file diff --git a/web/frontend/static/style.css b/web/frontend/static/style.css index 0cf0b2c..30e3211 100644 --- a/web/frontend/static/style.css +++ b/web/frontend/static/style.css @@ -24,6 +24,7 @@ a { width: 100%; height: calc(100% - 55px); margin: auto; + padding-bottom: 50px; } .content>* { padding: 5%; @@ -54,4 +55,20 @@ footer { } footer.flex { flex-direction: row; +} + +.example-config { + background-color: white; + padding: 1%; +} + +.example-config > div{ + border-color: var(--other-background); + border-radius: 10px; + padding: 10px; + border-style: groove; +} + +form > div > * { + margin: 10px; } \ No newline at end of file