From a5c4f266a584d9501059ce422d120c716d35d66d Mon Sep 17 00:00:00 2001
From: Tomas Cejka <cejkat@cesnet.cz>
Date: Mon, 1 Jul 2019 13:06:27 +0000
Subject: [PATCH] setup: improved - add NETCONF info (appended into
 settings_local.py), create peer

---
 flowspec/forms.py            |  6 +++++-
 flowspec/views.py            | 18 +++++++++++++++++-
 templates/flowspy/setup.html |  2 ++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/flowspec/forms.py b/flowspec/forms.py
index b4ed9991..afb99cc1 100644
--- a/flowspec/forms.py
+++ b/flowspec/forms.py
@@ -273,5 +273,9 @@ def get_matchingprotocol_route_pks(protocolist, routes):
 
 class SetupForm(forms.Form):
     password = forms.CharField(widget=forms.PasswordInput(), label="Password")
-
+    netconf_device = forms.CharField(label="Router host (NETCONF)")
+    netconf_port = forms.IntegerField(label="Router port (NETCONF)", min_value=0, max_value=65535)
+    netconf_user = forms.CharField(label="Router user (NETCONF)")
+    netconf_pass = forms.CharField(widget=forms.PasswordInput(), label="Router password (NETCONF)")
+    test_peer_addr = forms.CharField(label="Test peer IP subnet")
 
diff --git a/flowspec/views.py b/flowspec/views.py
index 0601464a..fdf230b0 100644
--- a/flowspec/views.py
+++ b/flowspec/views.py
@@ -921,7 +921,7 @@ def routestats(request, route_slug):
         return HttpResponse(json.dumps({"error": "No data available. %s" % e}), mimetype="application/json", status=404)
 
 def setup(request):
-    if not User.objects.filter(username="admin"):
+    if User.objects.count() == 0:
         if request.method == "POST":
             form = SetupForm(request.POST)
             if form.is_valid():
@@ -929,6 +929,22 @@ def setup(request):
                 u.is_superuser = True
                 u.is_staff = True
                 u.save()
+                pr = PeerRange(network = form.cleaned_data["test_peer_addr"])
+                pr.save()
+                p = Peer(peer_name = "testpeer", peer_tag = "testpeer")
+                p.save()
+                p.networks.add(pr)
+                ua = UserProfile()
+                ua.user = u
+                ua.save()
+                ua.peers.add(p)
+
+                with open("flowspy/settings_local.py", "a") as f:
+                    f.write("NETCONF_DEVICE = \"%s\"\n" % form.cleaned_data["netconf_device"])
+                    f.write("NETCONF_USER = \"%s\"\n"   % form.cleaned_data["netconf_port"])
+                    f.write("NETCONF_PASS = \"%s\"\n"   % form.cleaned_data["netconf_user"])
+                    f.write("NETCONF_PORT = %s\n"       % form.cleaned_data["netconf_pass"])
+
                 logger.error('TODO REMOVE: password: %s' % form.cleaned_data["password"])
                 return HttpResponseRedirect(reverse("welcome"))
         else:
diff --git a/templates/flowspy/setup.html b/templates/flowspy/setup.html
index 6168c785..7bed5683 100644
--- a/templates/flowspy/setup.html
+++ b/templates/flowspy/setup.html
@@ -6,7 +6,9 @@
 	Set the password of admin user:
 	<form action="{% url setup %}" method="post">
 	{% csrf_token %}
+	<table>
 	{{ form }}
+	</table>
 	<input type="submit" value="Set">
 	</form>
 </div>
-- 
GitLab