Going home
This commit is contained in:
parent
77508479b4
commit
89533a54b1
9 changed files with 256 additions and 151 deletions
|
@ -208,6 +208,11 @@ class Ballot(models.Model):
|
|||
cast = models.BooleanField(default=False)
|
||||
|
||||
|
||||
class EncBallot(models.Model):
|
||||
handle = models.CharField(primary_key=True, default=uuid.uuid4, editable=False, max_length=255)
|
||||
ballot = models.CharField(max_length=4096)
|
||||
|
||||
|
||||
# Implements the new binary encoding scheme
|
||||
class EncryptedVote(models.Model):
|
||||
ballot = models.ForeignKey(Ballot, on_delete=models.CASCADE, related_name="encrypted_vote")
|
||||
|
|
|
@ -20,5 +20,6 @@ urlpatterns = [
|
|||
url(r'^(?P<event_id>[0-9a-f-]+)/prepare/$', views.event_trustee_setup, name='prepare-event'),
|
||||
url(r'^(?P<event_id>[0-9a-f-]+)/poll/(?P<poll_id>[0-9a-f-]+)/vote/$', views.event_vote, name='event-vote'),
|
||||
url(r'^(?P<event_id>[0-9a-f-]+)/create/poll/$', login_required(views.manage_questions), name='create-poll'),
|
||||
url(r'^(?P<event_id>[0-9a-f-]+)/poll/(?P<poll_id>[0-9a-f-]+)/edit$', login_required(views.edit_poll), name='edit-poll')
|
||||
url(r'^(?P<event_id>[0-9a-f-]+)/poll/(?P<poll_id>[0-9a-f-]+)/edit$', login_required(views.edit_poll), name='edit-poll'),
|
||||
url(r'^audit/$', views.vote_audit, name='vote_audit')
|
||||
]
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import urllib
|
||||
import urllib2
|
||||
import json
|
||||
import logging
|
||||
import base64
|
||||
|
||||
from django.contrib import messages
|
||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
||||
|
@ -11,7 +13,7 @@ from django.views import generic
|
|||
from django.conf import settings
|
||||
|
||||
from .forms import PollForm, OptionFormset, VoteForm, EventSetupForm, EventEditForm
|
||||
from .models import Event, Poll, Ballot, EncryptedVote, TrusteeKey, PartialBallotDecryption, CombinedBallot, VoteFragment
|
||||
from .models import Event, Poll, Ballot, EncBallot, EncryptedVote, TrusteeKey, PartialBallotDecryption, CombinedBallot, VoteFragment
|
||||
from allauthdemo.auth.models import DemoUser
|
||||
|
||||
from .tasks import email_trustees_prep, update_EID, generate_combpk, event_ended, create_ballots
|
||||
|
@ -110,6 +112,15 @@ def edit_poll(request, event_id, poll_id):
|
|||
return HttpResponseRedirect(reverse('polls:event-polls', args=[poll.event_id]))
|
||||
|
||||
|
||||
def vote_audit(request):
|
||||
encryptedBallot = get_object_or_404(EncBallot, handle=''+urllib.quote_plus(request.GET.get('handle', None)))
|
||||
|
||||
return render(request, "polls/vote_audit.html",
|
||||
{
|
||||
"ballot": encryptedBallot.ballot
|
||||
})
|
||||
|
||||
|
||||
def event_vote(request, event_id, poll_id):
|
||||
event = get_object_or_404(Event, pk=event_id)
|
||||
|
||||
|
@ -172,10 +183,21 @@ def event_vote(request, event_id, poll_id):
|
|||
cant_vote_reason = "The event either isn't ready for voting or it has expired and therefore you cannot vote."
|
||||
|
||||
if request.method == "POST":
|
||||
data = json.loads(request.POST.lists()[0][0])
|
||||
ballot_json = data['ballot']
|
||||
ballot_json = json.loads(request.POST.get('ballot'))
|
||||
encrypted_votes_json = ballot_json['encryptedVotes']
|
||||
|
||||
enc_ballot_json = request.POST.get('encBallot')
|
||||
handle_json = request.POST.get('handle')
|
||||
|
||||
# Adds or replaces the encrypted un-submitted ballot to the database for the auditor app to pick up later
|
||||
if EncBallot.objects.filter(handle=handle_json).exists():
|
||||
b = EncBallot.objects.get(handle=handle_json)
|
||||
b.ballot = ballot_json
|
||||
b.save()
|
||||
else:
|
||||
b = EncBallot(handle=handle_json, ballot=enc_ballot_json)
|
||||
b.save()
|
||||
|
||||
# Before storing the encrypted votes, we need the voter's ballot
|
||||
ballot, created = Ballot.objects.get_or_create(voter=email_key[0].user, poll=poll)
|
||||
EncryptedVote.objects.filter(ballot=ballot).delete()
|
||||
|
|
|
@ -11,16 +11,16 @@
|
|||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script>
|
||||
<script src="https://bitwiseshiftleft.github.io/sjcl/sjcl.js"></script>
|
||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||
<script
|
||||
src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
|
||||
integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
|
||||
|
||||
<script src="{% static 'js/papaparse.min.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/qrcode.min.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/create-event-poll.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/decrypt_event.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/event_vote.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/vote_audit.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/encrypt.js' %}" type="text/javascript"></script>
|
||||
|
||||
<script type="text/javascript" src="{% static 'js/core/rand.js' %}"></script>
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
</span>
|
||||
|
||||
<!-- Poll Voting Section -->
|
||||
<p id="poll-num" hidden>{{ poll_num}}</p>
|
||||
<h3>Poll {{ poll_num }} of {{ poll_count }}: {{object.question_text}}</h3>
|
||||
<hr/>
|
||||
|
||||
|
@ -124,7 +125,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button id="close-button" type="button" class="btn btn-danger" data-dismiss="modal">Close without submitting vote</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
18
allauthdemo/templates/polls/vote_audit.html
Normal file
18
allauthdemo/templates/polls/vote_audit.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
{% extends "bases/bootstrap-with-nav.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<input id="SK" value="temporary" type="text"/>
|
||||
<button id="begin-test">Verify Ballot</button>
|
||||
<br>
|
||||
<br>
|
||||
<label for="ballot">AES-encrypted ballot from server</label>
|
||||
<pre id="ballot">{{ ballot }}</pre>
|
||||
<label for="ballot-content">Decrypted ballot</label>
|
||||
<pre id="ballot-content"></pre>
|
||||
<label for="ballot">Ballot encoding</label>
|
||||
<pre id="ballot-result"></pre>
|
||||
|
||||
{% endblock %}
|
Reference in a new issue