implement debug login;

add functions for add/remove/view peerings
This commit is contained in:
lare 2022-11-18 10:25:58 +01:00
parent 73de6addc1
commit 85135dd449
5 changed files with 65 additions and 23 deletions

View file

@ -3,7 +3,7 @@
from flask import Flask, Response, redirect, render_template, request, session, abort from flask import Flask, Response, redirect, render_template, request, session, abort
import json, os, base64 import json, os, base64
from functools import wraps from functools import wraps
from ipaddress import ip_address, ip_network
import kioubit_verify import kioubit_verify
app = Flask(__name__) app = Flask(__name__)
@ -49,7 +49,7 @@ def auth_required():
@wraps(f) @wraps(f)
def decorated(*args, **kwargs): def decorated(*args, **kwargs):
if not "login" in session: if not "login" in session:
return redirect(f"login?return={request.url}") return redirect(f"{config['base-dir']}login?return={request.url}")
else: else:
return f(*args, **kwargs) return f(*args, **kwargs)
return decorated return decorated
@ -89,28 +89,57 @@ def login():
session["return_url"] = request.args["return"] if "return" in request.args else "" session["return_url"] = request.args["return"] if "return" in request.args else ""
return render_template("login.html", session=session, config=config, return_addr=session["return_url"]) return render_template("login.html", session=session, config=config, return_addr=session["return_url"])
elif request.method == "POST": elif request.method == "POST" and config["debug-mode"]:
if config["domain"] == "svc.burble.dn42:8042" and request.form["logincode"] and request.form["logincode"] == "eyJhc24iOjQyNDI0MjMwMzUsImFsbG93ZWQ0IjoiMTcyLjIyLjEyNS4xMjhcLzI2LDE3Mi4yMC4wLjgxXC8zMiIsImFsbG93ZWQ2IjoiZmQ2Mzo1ZDQwOjQ3ZTU6OlwvNDgsZmQ0MjpkNDI6ZDQyOjgxOjpcLzY0IiwibW50IjoiTEFSRS1NTlQifQo=": try:
print("abc") mnt = request.form["mnt"]
user_data = json.loads(base64.b64decode(request.form["logincode"])) asn = request.form["asn"]
session["login"] = user_data['mnt'] asn = asn[2:] if asn[:1].lower() == "as" else asn
session["user-data"] = user_data if "allowed4" in request.form:
return redirect(request.args["return"]) allowed4 = request.form["allowed4"]
allowed4 = allowed_v4.split(",") if "," in allowed_v4 else allowed_v4
else:
allowed4 = None
if "allowed6" in request.form:
allowed6 = request.form["allowed6"]
allowed6 = allowed_v6.split(",") if "," in allowed_v6 else allowed_v6
else:
allowed6 = None
session["user-data"] = {'asn':asn,'allowed4': allowed4, 'allowed6': allowed6,'mnt':mnt, 'authtype': "debug"}
session["login"] = mnt
return redirect(session["return_url"])
except KeyError:
msg = "not all required field were specified"
return render_template("login.html", session=session,config=config,return_addr=session["return_url"], msg=msg)
elif request.method == "POST" and not config["debug-mode"]:
abort(405)
return redirect(request.args["return"])
@app.route("/peer", methods=["GET","POST"]) @app.route("/peerings/delete", methods=["GET","DELETE"])
@auth_required() @auth_required()
def peer(): def peerings_delete():
return f"{request.method} /peerings/delete?{str(request.args)}{str(request.form)}"
@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)}"
@app.route("/peerings", methods=["GET","POST","DELETE"])
@auth_required()
def peerings():
if request.method == "GET": if request.method == "GET":
if "node" in request.args and request.args["node"] in config["nodes"]: if "node" in request.args and request.args["node"] in config["nodes"]:
return render_template("peer.html", config=config, selected_node=request.args["node"]) return render_template("peerings.html", config=config, selected_node=request.args["node"])
return str(config["nodes"][request.args["node"]]) else:
else: return render_template("peer.html", session=session,config=config) return render_template("peerings.html", session=session,config=config)
elif request.method == "POST": elif request.method == "POST":
return "POST /peer" return peerings_new()
elif request.method == "DELETE":
return peerings_delete()
else: else:
return 405 abort(405)
@app.route("/") @app.route("/")
def index(): def index():

View file

@ -24,7 +24,7 @@
<td>{{config["nodes"][node]["country"]}}</td> <td>{{config["nodes"][node]["country"]}}</td>
<td>{{config["nodes"][node]["city"]}}</td> <td>{{config["nodes"][node]["city"]}}</td>
<td></td> <td></td>
<td><a href="peer?node={{node}}">peer</a></td> <td><a href="peerings/new?node={{node}}">peer</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -19,11 +19,11 @@
{% if config["debug-mode"] %} {% if config["debug-mode"] %}
<form action="" method="post" class="flex"> <form action="" method="post" class="flex">
<label for="debug">Debug login, if you see this in Production contact {{config["MNT"]}}</label><br> <label for="debug">Debug login, if you see this in Production contact {{config["MNT"]}}</label><br>
<input type="text" name="mnt" id="mnt" placeholder="YOUR-MNT"><br> <input type="text" name="mnt" id="mnt" placeholder="YOUR-MNT" required><br>
<input type="text" name="asn" id="asn" placeholder="AS4242420000"><br> <input type="text" name="asn" id="asn" placeholder="AS4242420000" required><br>
<input type="text" name="allowed-v4" id="allowed-v4" placeholder="ipv4 subnet"><br> <input type="text" name="allowed4" id="allowed4" placeholder="ipv4 subnet (optional)"><br>
<input type="text" name="allowed-v6" id="allowed-v6" placeholder="ipv6 subnet"><br> <input type="text" name="allowed6" id="allowed6" placeholder="ipv6 subnet (optional)"><br>
<input type="number" name="theanswer" id="theanswer" placeholder="The answer for everything"><br> <input type="number" name="theanswer" id="theanswer" placeholder="The answer for everything" required><br>
<input type="submit" value="login"> <input type="submit" value="login">
</form> </form>
{% endif %} {% endif %}

View file

@ -0,0 +1,13 @@
{% extends 'base.html' %}
{% block content %}
<form action="peer" method="post">
<select name="node" id="node">
{% for node in config["nodes"] %}
<option value="{{node}}" {% if selected_node %}{% if selected_node == node %}selected{% endif %}{% endif %} >{{node}}</option>
{% endfor %}
</select>
</form>
{% endblock %}