diff --git a/helios/__init__.py b/helios/__init__.py index 18371b7c46248d708dfd1aaa729394e72c61e8c0..06f05140bb83798916f63786610efa87d916e26a 100644 --- a/helios/__init__.py +++ b/helios/__init__.py @@ -1,5 +1,7 @@ from django.conf import settings +from django.core.urlresolvers import reverse +from helios.views import election_shortcut TEMPLATE_BASE = settings.HELIOS_TEMPLATE_BASE or "helios/templates/base.html" @@ -12,3 +14,4 @@ VOTERS_UPLOAD = settings.HELIOS_VOTERS_UPLOAD # allow emailing of voters? VOTERS_EMAIL = settings.HELIOS_VOTERS_EMAIL + diff --git a/helios/models.py b/helios/models.py index af83572e0a42f29743b781af1d7c5bd4bdf0be8f..2ddc440286dfb29d250ea52ebb5e29a3b6e6682a 100644 --- a/helios/models.py +++ b/helios/models.py @@ -15,7 +15,7 @@ import datetime, logging, uuid, random from crypto import electionalgs, algs, utils from helios import utils as heliosutils -import helios +import helios.views from helios import datatypes @@ -460,7 +460,7 @@ class Election(HeliosModel): @property def url(self): - return helios.get_election_url(self) + return helios.views.get_election_url(self) def init_tally(self): # FIXME: create the right kind of tally diff --git a/helios/urls.py b/helios/urls.py index b08550cba9453366c6bc104c64891aca6dde6fb4..6b19f880d75b6333cbb963f7a084dd3bb3ff0c9f 100644 --- a/helios/urls.py +++ b/helios/urls.py @@ -18,6 +18,7 @@ urlpatterns = patterns('', # election shortcut by shortname (r'^e/(?P<election_short_name>[^/]+)$', election_shortcut), + (r'^e/(?P<election_short_name>[^/]+)/vote$', election_vote_shortcut), # vote shortcut (r'^v/(?P<vote_tinyhash>[^/]+)$', castvote_shortcut), diff --git a/helios/views.py b/helios/views.py index 80c5497a0d8f7f8bc21d34a67b53d58f4430faeb..1ae48d306f2f866b7458deacb0760e7d26d4821c 100644 --- a/helios/views.py +++ b/helios/views.py @@ -49,10 +49,12 @@ ELGAMAL_PARAMS_LD_OBJECT = datatypes.LDObject.instantiate(ELGAMAL_PARAMS, dataty # single election server? Load the single electionfrom models import Election from django.conf import settings -# a helper function def get_election_url(election): return settings.URL_HOST + reverse(election_shortcut, args=[election.short_name]) +def get_election_govote_url(election): + return settings.URL_HOST + reverse(election_vote_shortcut, args=[election.short_name]) + def get_castvote_url(cast_vote): return settings.URL_HOST + reverse(castvote_shortcut, args=[cast_vote.vote_tinyhash]) @@ -137,6 +139,17 @@ def election_shortcut(request, election_short_name): else: raise Http404 +def election_vote_shortcut(request, election_short_name): + election = Election.get_by_short_name(election_short_name) + if election: + 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})) + + return HttpResponseRedirect(test_cookie_url) + else: + raise Http404 + def castvote_shortcut(request, vote_tinyhash): try: cast_vote = CastVote.objects.get(vote_tinyhash = vote_tinyhash) @@ -311,7 +324,7 @@ def one_election_view(request, election): })) trustees = Trustee.get_by_election(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, @@ -1165,7 +1178,7 @@ def voters_email(request, election): extra_vars = { 'custom_subject' : email_form.cleaned_data['subject'], 'custom_message' : email_form.cleaned_data['body'], - 'election_url' : get_election_url(election), + 'election_url' : get_election_govote_url(election), 'election' : election }