From 7395ccfa9dfd42dbf4cfd5bdc6434c06111ef4cf Mon Sep 17 00:00:00 2001
From: Ben Adida <ben@adida.net>
Date: Tue, 28 Sep 2010 16:39:24 -0700
Subject: [PATCH] added cookie testing

---
 helios/templates/election_view.html |  2 +-
 helios/templates/nocookies.html     | 14 ++++++++++++++
 helios/urls.py                      |  3 +++
 helios/views.py                     | 27 +++++++++++++++++++++++++--
 4 files changed, 43 insertions(+), 3 deletions(-)
 create mode 100644 helios/templates/nocookies.html

diff --git a/helios/templates/election_view.html b/helios/templates/election_view.html
index 6578b0c..3d7f3e6 100644
--- a/helios/templates/election_view.html
+++ b/helios/templates/election_view.html
@@ -149,7 +149,7 @@ all voters will be notified that the tally is ready.
 
 {% if election.voting_has_started %}
 <span class="highlight-box round" style="font-size: 1.6em; margin-right: 10px;" id="votelink">
-<a href="{{SECURE_URL_HOST}}/booth/vote.html?election_url={% url helios.views.one_election election.uuid %}">Vote in this election </a>
+<a href="{{test_cookie_url}}">Vote in this election </a>
 </span><br />
 {% if not user %}
 <br />
diff --git a/helios/templates/nocookies.html b/helios/templates/nocookies.html
new file mode 100644
index 0000000..f8d751b
--- /dev/null
+++ b/helios/templates/nocookies.html
@@ -0,0 +1,14 @@
+{% extends TEMPLATE_BASE %}
+
+{% block title %}Cookies are required for Helios use{% endblock %}
+
+{% block content %}
+  <h2 class="title">Cookies are Required for Helios</h2>
+
+<p>
+It appears your browser does not support cookies or is set up to block cookies from this site. Helios needs to set a session cookie so that it can save your vote, let you log in, etc. Enable cookies and then <a href="{{retest_url}}">proceed to preparing your ballot</a>
+</p>
+<p>
+If you keep getting sent back to this page, it's probably because you haven't enabled cookies successfully.
+</p>
+{% endblock %}
diff --git a/helios/urls.py b/helios/urls.py
index 5915f92..5c9127d 100644
--- a/helios/urls.py
+++ b/helios/urls.py
@@ -9,6 +9,9 @@ urlpatterns = None
 
 urlpatterns = patterns('',
   (r'^$', home),
+  (r'^testcookie$', test_cookie),
+  (r'^testcookie_2$', test_cookie_2),
+  (r'^nocookies$', nocookies),
   (r'^stats$', stats),
   (r'^socialbuttons$', socialbuttons),
 
diff --git a/helios/views.py b/helios/views.py
index 71771f8..007b40f 100644
--- a/helios/views.py
+++ b/helios/views.py
@@ -203,6 +203,10 @@ def one_election_view(request, election):
   
   election_url = get_election_url(election)
   status_update_message = None
+
+  vote_url = "%s/booth/vote.html?%s" % (settings.SECURE_URL_HOST, urllib.urlencode({'election_url' : reverse(one_election, args=[election.uuid])}))
+
+  test_cookie_url = "%s?%s" % (reverse(test_cookie), urllib.urlencode({'continue_url' : vote_url}))
   
   if user:
     voter = Voter.get_by_election_and_user(election, user)
@@ -244,8 +248,27 @@ def one_election_view(request, election):
   return render_template(request, 'election_view',
                          {'election' : election, 'trustees': trustees, 'admin_p': admin_p, 'user': user,
                           'voter': voter, 'votes': votes, 'notregistered': notregistered, 'eligible_p': eligible_p,
-                          'can_feature_p': can_feature_p, 'election_url' : election_url,
-                          'socialbuttons_url' : socialbuttons_url})
+                          'can_feature_p': can_feature_p, 'election_url' : election_url, 'vote_url': vote_url,
+                          'test_cookie_url': test_cookie_url, 'socialbuttons_url' : socialbuttons_url})
+
+def test_cookie(request):
+  continue_url = request.GET['continue_url']
+  request.session.set_test_cookie()
+  next_url = "%s?%s" % (reverse(test_cookie_2), urllib.urlencode({'continue_url': continue_url}))
+  return HttpResponseRedirect(next_url)  
+
+def test_cookie_2(request):
+  continue_url = request.GET['continue_url']
+
+  if not request.session.test_cookie_worked():
+    return HttpResponseRedirect("%s?%s" % (reverse(nocookies), urllib.urlencode({'continue_url': continue_url})))
+
+  request.session.delete_test_cookie()
+  return HttpResponseRedirect(continue_url)  
+
+def nocookies(request):
+  retest_url = "%s?%s" % (reverse(test_cookie), urllib.urlencode({'continue_url' : request.GET['continue_url']}))
+  return render_template(request, 'nocookies', {'retest_url': retest_url})
 
 def socialbuttons(request):
   """
-- 
GitLab