From 8e0eb848ccc1826e8d3fbc3ab6022c581800d9ee Mon Sep 17 00:00:00 2001
From: Shirlei Chaves <shirlei@gmail.com>
Date: Wed, 4 May 2016 09:42:47 -0300
Subject: [PATCH] Save cast_ip

---
 helios/views.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/helios/views.py b/helios/views.py
index 0aaaaa5..5e1d0be 100644
--- a/helios/views.py
+++ b/helios/views.py
@@ -616,12 +616,22 @@ def one_election_cast_confirm(request, election):
   if voter:
     vote = datatypes.LDObject.fromDict(utils.from_json(encrypted_vote), type_hint='legacy/EncryptedVote').wrapped_obj
 
+    if 'HTTP_X_FORWARDED_FOR' in request.META:
+      # HTTP_X_FORWARDED_FOR sometimes have a comma delimited list of IP addresses
+      # Here we want the originating IP address
+      # See http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html
+      # and https://en.wikipedia.org/wiki/X-Forwarded-For
+      cast_ip = request.META.get('HTTP_X_FORWARDED_FOR').split(',')[0].strip() or None
+    else:
+      cast_ip = request.META.get('REMOTE_ADDR', None)
+
     # prepare the vote to cast
     cast_vote_params = {
       'vote' : vote,
       'voter' : voter,
       'vote_hash': vote_fingerprint,
-      'cast_at': datetime.datetime.utcnow()
+      'cast_at': datetime.datetime.utcnow(),
+      'cast_ip': cast_ip
     }
 
     cast_vote = CastVote(**cast_vote_params)
-- 
GitLab