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