From 279681b1124999bda13f2dd1cc62b5182dd62c9e Mon Sep 17 00:00:00 2001
From: Sergios Aftsidis <safts@noc.grnet.gr>
Date: Wed, 15 Mar 2017 16:28:23 +0200
Subject: [PATCH] Fix issue with `request.user` in Celery task

When the user was not a "superuser", `request.user` was being
passed in the route object sent as a Celery job. This led to
an error (only reproducable in one of our instances, don't know
the exact conditions since all packets & versions seemed to be
identical):

    EncodeError: dictionary changed size during iteration

Fix:

* Use the `User` object retrieved from the ORM instead

Also, store the user even if the route is created from an admin.
---
 flowspec/views.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/flowspec/views.py b/flowspec/views.py
index 885b8fec..4f3ac1c9 100644
--- a/flowspec/views.py
+++ b/flowspec/views.py
@@ -296,8 +296,7 @@ def add_route(request):
         form = RouteForm(request_data)
         if form.is_valid():
             route = form.save(commit=False)
-            if not request.user.is_superuser:
-                route.applier = request.user
+            route.applier = User.objects.get(username=request.user.username)
             route.status = "PENDING"
             route.response = "Applying"
             route.source = IPNetwork('%s/%s' % (IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
-- 
GitLab