add example-configs and form on peering/new
This commit is contained in:
parent
bc55c5df00
commit
107644cbd7
5 changed files with 118 additions and 19 deletions
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"nodes": {
|
||||
"<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
|
||||
"#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
|
||||
|
|
|
@ -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 """<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()
|
||||
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"])
|
||||
|
||||
|
||||
|
|
|
@ -1,13 +1,84 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<script>
|
||||
function form_validate(form) {
|
||||
|
||||
<form action="" 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>
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{% for node in config["nodes"] %}
|
||||
<a href="?node={{node}}">
|
||||
<button {% if selected_node %}{% if selected_node == node %}class="button-selected"{% endif %}{% endif %} >
|
||||
{{node}}
|
||||
</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>
|
||||
<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 %}
|
|
@ -1,14 +1,13 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<script>
|
||||
|
||||
</script>
|
||||
<div>
|
||||
<a href="peerings/new"><button>add new</button></a>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
{% for peering in peerings.get_peerings_by_mnt(session["login"]) %}
|
||||
{{peering}} <br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -24,6 +24,7 @@ a {
|
|||
width: 100%;
|
||||
height: calc(100% - 55px);
|
||||
margin: auto;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
.content>* {
|
||||
padding: 5%;
|
||||
|
@ -55,3 +56,19 @@ 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue