aboutsummaryrefslogtreecommitdiff
path: root/app/manage/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/manage/__init__.py')
-rw-r--r--app/manage/__init__.py52
1 files changed, 51 insertions, 1 deletions
diff --git a/app/manage/__init__.py b/app/manage/__init__.py
index c69376f..afa9343 100644
--- a/app/manage/__init__.py
+++ b/app/manage/__init__.py
@@ -1,9 +1,12 @@
from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
import ulid
+import flask
+
+from datetime import datetime, timedelta
from app import db
-from app.database import Network
+from app.database import EnrollRequest, Network
from .forms import NewNetworkForm
@@ -48,3 +51,50 @@ def del_net(id):
flash("Network deleted")
return redirect(url_for("manage.list_networks"))
+
+@bp.route("/peers", methods=["GET", "POST"])
+@login_required
+def list_peers():
+ peers = current_user.peers
+
+ return render_template("peer_list.html", peers=peers)
+
+
+"""
+Here starts the enrollment API
+
+Maybe this should be in a new blueprint but i don't care enough about where
+exactly it goes that it's fine.
+"""
+
+@bp.route("/enroll_start", methods=["GET"])
+def enroll_start():
+ """
+ this function only creates a new enrollment request and gives the ID back to
+ the user for use in the client, which should proceed immediately to the next
+ step -- using the ID to complete the enrollment process by sending a public
+ key back, and receiving an IP in return. This should probably return a form
+ so users can choose which network (of the ones they manage) the device
+ should be in.
+
+ Alternately to that, there could just be a menu in the client that lets the
+ user do that themselves without going to the web client except to
+ authenticate.
+
+ Theoretically, there should be an optional approval mechanism where someone
+ with the is_admin flag can choose to get an email every time someone tries
+ to enroll after the request is completed, where the peer will exist and be
+ "enrolled" but no one will actually get the configuration until it's marked
+ as "approved" in the database
+ """
+
+ en_req = EnrollRequest(
+ id=str(ulid.ulid()),
+ user=str(current_user.id),
+ expires=datetime.now() + timedelta(days=30)
+ )
+
+ db.session.add(en_req)
+ db.session.commit()
+
+ return en_req.to_json()