From 10c613fa278897e26fe73ebd2031c9a430a3762f Mon Sep 17 00:00:00 2001
From: Stauros Kroustouris <staurosk@noc.grnet.gr>
Date: Thu, 10 Sep 2015 11:14:14 +0300
Subject: [PATCH] commit changes in the device after m2m is saved

---
 flowspec/views.py | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/flowspec/views.py b/flowspec/views.py
index 0468d07..217f785 100644
--- a/flowspec/views.py
+++ b/flowspec/views.py
@@ -218,9 +218,10 @@ def build_routes_json(groutes):
 @never_cache
 def add_route(request):
     applier = request.user.pk
-    applier_peer_networks = request.user.get_profile().peer.networks.all()
     if request.user.is_superuser:
         applier_peer_networks = PeerRange.objects.all()
+    else:
+        applier_peer_networks = request.user.get_profile().peer.networks.all()
     if not applier_peer_networks:
         messages.add_message(
             request,
@@ -255,10 +256,16 @@ def add_route(request):
             route.response = "Applying"
             route.source = IPNetwork('%s/%s' % (IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
             route.destination = IPNetwork('%s/%s' % (IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
-            route.requesters_address = request.META['HTTP_X_FORWARDED_FOR']
+            try:
+                route.requesters_address = request.META['HTTP_X_FORWARDED_FOR']
+            except:
+                # in case the header is not provided
+                route.requesters_address = 'unknown'
             route.save()
-            route.commit_add()
             form.save_m2m()
+            # We have to make the commit after saving the form
+            # in order to have all the m2m relations.
+            route.commit_add()
             return HttpResponseRedirect(reverse("group-routes"))
         else:
             if not request.user.is_superuser:
@@ -325,12 +332,16 @@ def edit_route(request, route_slug):
                 route.response = "Applying"
                 route.source = IPNetwork('%s/%s' % (IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
                 route.destination = IPNetwork('%s/%s' % (IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
-                route.requesters_address = request.META['HTTP_X_FORWARDED_FOR']
+                try:
+                    route.requesters_address = request.META['HTTP_X_FORWARDED_FOR']
+                except:
+                    # in case the header is not provided
+                    route.requesters_address = 'unknown'
+
             route.save()
-            route.commit_edit()
             if bool(set(changed_data) & set(critical_changed_values)) or (not route_original.status == 'ACTIVE'):
                 form.save_m2m()
-                # route.commit_edit()
+                route.commit_edit()
             return HttpResponseRedirect(reverse("group-routes"))
         else:
             if not request.user.is_superuser:
-- 
GitLab