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