add example-configs and form on peering/new
This commit is contained in:
parent
33e49bc0b6
commit
a44c0fdf41
5 changed files with 119 additions and 20 deletions
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"<nodename>": {
|
"<nodename>": {
|
||||||
"pub-endpoint": "<clearnet-fqdn/ip-address>", //optional, recommended, default: None/null
|
"endpoint": "<clearnet-fqdn/ip-address>", //optional, recommended, default: None/null
|
||||||
"api-con": "http://<node-(internal)-ip/hostname>:<port>/", // required
|
"api-con": "http://<node-(internal)-ip/hostname>:<port>/", // required
|
||||||
"#comment": "/* from here: data to be displayed on the webinterface */",
|
"#comment": "/* from here: data to be displayed on the webinterface */",
|
||||||
"country": "...", // Countrycode: 2 capital letters
|
"country": "...", // Countrycode: 2 capital letters
|
||||||
|
@ -16,6 +16,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MNT": "YOUR-MNT", // your MNT tag
|
"MNT": "YOUR-MNT", // your MNT tag
|
||||||
|
"ASN": "424242000", //Your ASN (used to generate default peer ListenPorts)
|
||||||
"listen": "0.0.0.0",
|
"listen": "0.0.0.0",
|
||||||
"port": 8042,
|
"port": 8042,
|
||||||
"domain": "example.org", // domain to use for kioubit verification service
|
"domain": "example.org", // domain to use for kioubit verification service
|
||||||
|
|
|
@ -91,6 +91,7 @@ class PeeringManager(dict):
|
||||||
json.dump(self._peerings, p, indent=4)
|
json.dump(self._peerings, p, indent=4)
|
||||||
|
|
||||||
def get_peerings_by_mnt(self, mnt):
|
def get_peerings_by_mnt(self, mnt):
|
||||||
|
return [{}]
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,6 +144,10 @@ def login():
|
||||||
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" and config["debug-mode"]:
|
elif request.method == "POST" and config["debug-mode"]:
|
||||||
try:
|
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"]
|
mnt = request.form["mnt"]
|
||||||
asn = request.form["asn"]
|
asn = request.form["asn"]
|
||||||
asn = asn[2:] if asn[:1].lower() == "as" else 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"])
|
@app.route("/peerings/new", methods=["GET","POST"])
|
||||||
@auth_required()
|
@auth_required()
|
||||||
def peerings_new():
|
def peerings_new():
|
||||||
return render_template("peerings-new.html", session=session,config=config)
|
if request.method == "GET":
|
||||||
|
print(session)
|
||||||
return f"{request.method} /peerings/new {str(request.args)}{str(request.form)}"
|
if "node" in request.args and request.args["node"] in config["nodes"]:
|
||||||
@app.route("/peerings", methods=["GET","POST","DELETE"])
|
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 """<div>creating peerings is not (yet) implemented</div><div><a href="../">return</a>"""
|
||||||
|
return f"{request.method} /peerings/new {str(request.args)}{str(request.form)}"
|
||||||
|
@app.route("/peerings/", methods=["GET","POST","DELETE"])
|
||||||
@auth_required()
|
@auth_required()
|
||||||
def peerings():
|
def peerings_view():
|
||||||
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("peerings.html", config=config, selected_node=request.args["node"])
|
return render_template("peerings.html", config=config, selected_node=request.args["node"], peerings=peerings)
|
||||||
else:
|
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":
|
elif request.method == "POST":
|
||||||
return peerings_new()
|
return peerings_new()
|
||||||
elif request.method == "DELETE":
|
elif request.method == "DELETE":
|
||||||
|
@ -205,11 +216,11 @@ def main():
|
||||||
app.template_folder=config["flask-template-dir"]
|
app.template_folder=config["flask-template-dir"]
|
||||||
app.secret_key = config["flask-secret-key"]
|
app.secret_key = config["flask-secret-key"]
|
||||||
if "production" in config and config["production"] == False:
|
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)
|
app.run(host=config["listen"], port=config["port"], debug=config["debug-mode"], threaded=True)
|
||||||
else:
|
else:
|
||||||
from waitress import serve
|
from waitress import serve
|
||||||
logging.getLogger(__name__).setLevel(logging.NOTSET)
|
logging.getLogger(__name__).setLevel(logging.INFO)
|
||||||
serve(app, host=config["listen"], port=config["port"])
|
serve(app, host=config["listen"], port=config["port"])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,84 @@
|
||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<script>
|
||||||
|
function form_validate(form) {
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<form action="" method="post">
|
<div>
|
||||||
<select name="node" id="node">
|
{% for node in config["nodes"] %}
|
||||||
{% for node in config["nodes"] %}
|
<a href="?node={{node}}">
|
||||||
<option value="{{node}}" {% if selected_node %}{% if selected_node == node %}selected{% endif %}{% endif %} >{{node}}</option>
|
<button {% if selected_node %}{% if selected_node == node %}class="button-selected"{% endif %}{% endif %} >
|
||||||
{% endfor %}
|
{{node}}
|
||||||
</select>
|
</button>
|
||||||
|
</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<form action="" method="post" class="flex" onsubmit="form_validate(this)">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><label for="peer-asn">Your ASN</label></td>
|
||||||
|
<td></td>
|
||||||
|
<td><input type="text" name="peer-asn" id="peer-asn" disabled="disabled" value="{{session['user-data']['asn']}}"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label for="peer-wgkey">your Wireguard Publickey</label></td>
|
||||||
|
<td></td>
|
||||||
|
<td><input type="text" name="peer-wgkey" id="peer-wgkey"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label for="peer-endpoint">your Endpoint</label></td>
|
||||||
|
<td><input type="checkbox" name="peer-endpoint-enabled" id="peer-endpoint-enabled" checked></td>
|
||||||
|
<td><input type="text" name="peer-endpoint" id="peer-endpoint"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label for="peer-v6ll">your ipv6 LinkLocal</label></td>
|
||||||
|
<td><input type="checkbox" name="peer-v6ll-enabled" id="peer-v6ll-enabled" checked></td>
|
||||||
|
<td><input type="text" name="peer-v6ll" id="peer-v6ll"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label for="peer-v4">your ipv4</label></td>
|
||||||
|
<td><input type="checkbox" name="peer-v4-enabled" id="peer-v4-enabled"></td>
|
||||||
|
<td><input type="text" name="peer-v4" id="peer-v4"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label for="peer-v6">your ipv6</label></td>
|
||||||
|
<td><input type="checkbox" name="peer-v6-enabled" id="peer-v6-enabled"></td>
|
||||||
|
<td><input type="text" name="peer-v6" id="peer-v6"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</form>
|
</form>
|
||||||
|
<div class="example-config">
|
||||||
|
|
||||||
|
<p>wg-quick:</p>
|
||||||
|
<div id="node-wireguard">
|
||||||
|
<code>
|
||||||
|
[Interface] <br>
|
||||||
|
PrivateKey = <your private key> <br>
|
||||||
|
ListenPort = <span id="example-config-peer-port">2{{config["ASN"][-4:]}}</span><br>
|
||||||
|
<span class="example-config-ipv4">PostUp = ip address add <span class="example-config-peer-ipv4">...</span>/32 peer <span class="example-config-node-ipv4">{% if selected_node %}{{config["nodes"][selected_node]["internal-v4"]}} {% else %} ... {% endif %}</span><br></span>
|
||||||
|
<span class="example-config-ipv6">PostUp = ip address add <span class="example-config-peer-ipv6">...</span>/128 peer <span class="example-config-node-ipv6">{% if selected_node %}{{config["nodes"][selected_node]["internal-v6"]}} {% else %} ... {% endif %}</span><br></span>
|
||||||
|
<span class="example-config-ipv6ll">PostUp = ip address add <span class="example-config-peer-ipv6ll">...</span>/128 peer <span class="example-config-node-ipv6ll">{% if selected_node %}{{config["nodes"][selected_node]["internal-v6ll"]}} {% else %} ... {% endif %}</span><br></span>
|
||||||
|
Table = off <br>
|
||||||
|
<br>
|
||||||
|
[Peer] <br>
|
||||||
|
PublicKey = <span class="exmple-config-node-pubkey">{% if selected_node %}{{config["nodes"][selected_node]["wg-key"]}}{% else %} ... {% endif %}</span><br>
|
||||||
|
Endpoint = <span class="exmple-config-node-endpoint">{% if selected_node %}{{config["nodes"][selected_node]["endpoint"]}}{% else %} ... {% endif %}</span>:<span class="example-config-node-port">{% if selected_node %}{% if session["user-data"]["asn"].startswith("AS424242") %}5{{session["user-data"]["asn"][-4:]}}{% else %} ... {% endif %}{% else %} ... {% endif %}</span><br>
|
||||||
|
AllowedIPs = <span class="example-config-node-v6ll">{% if selected_node %}{{config["nodes"][selected_node]["internal-v6ll"]}} {% else %} ... {% endif %}</span>,172.20.0.0/14,172.31.0.0/16,10.0.0.0/8,fd00::/8 <br>
|
||||||
|
</code>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>bird(2) config:</p>
|
||||||
|
<div id="peer-bird">
|
||||||
|
<code id="example-config-bird">
|
||||||
|
protocol bgp dn42_{{config["MNT"][:-4].lower()}} from dnpeers { <br>
|
||||||
|
	neighbor {% if selected_node %}{{config["nodes"][selected_node]["internal-v6ll"]}} {% else %} ... {% endif %} as {{config["ASN"]}};<br>
|
||||||
|
	interface "dn42_{{config["MNT"][:-4].lower()}}";<br>
|
||||||
|
} <br>
|
||||||
|
</code>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -1,14 +1,13 @@
|
||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<script>
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<div>
|
<div>
|
||||||
<a href="peerings/new"><button>add new</button></a>
|
<a href="peerings/new"><button>add new</button></a>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
{% for peering in peerings.get_peerings_by_mnt(session["login"]) %}
|
||||||
|
{{peering}} <br>
|
||||||
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -24,6 +24,7 @@ a {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: calc(100% - 55px);
|
height: calc(100% - 55px);
|
||||||
margin: auto;
|
margin: auto;
|
||||||
|
padding-bottom: 50px;
|
||||||
}
|
}
|
||||||
.content>* {
|
.content>* {
|
||||||
padding: 5%;
|
padding: 5%;
|
||||||
|
@ -54,4 +55,20 @@ footer {
|
||||||
}
|
}
|
||||||
footer.flex {
|
footer.flex {
|
||||||
flex-direction: row;
|
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;
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue