Skip to content
Snippets Groups Projects
Commit 53e8d68c authored by Ben Adida's avatar Ben Adida
Browse files

changed to stub object for password-based voters

parent 64dc35ec
No related branches found
No related tags found
No related merge requests found
......@@ -114,7 +114,6 @@ def update_status(token, message):
pass
def send_message(user_id, user_name, user_info, subject, body):
if user_info.has_key('email'):
email = user_info['email']
email = user_id
name = user_name or user_info.get('name', email)
send_mail(subject, body, settings.SERVER_EMAIL, ["%s <%s>" % (name, email)], fail_silently=False)
......@@ -9,6 +9,7 @@ Ben Adida
from django.db import models, transaction
from django.utils import simplejson
from django.conf import settings
from django.core.mail import send_mail
import datetime, logging, uuid, random
......@@ -510,9 +511,8 @@ class VoterFile(models.Model):
if len(voter) > 2:
name = voter[2]
# create the user -- NO MORE!
# user = User.update_or_create(user_type='password', user_id=voter_id, info = {'password': heliosutils.random_string(10), 'email': email, 'name': name})
# user.save()
# create the user -- NO MORE
# user = User.update_or_create(user_type='password', user_id=email, info = {'name': name})
# does voter for this user already exist
voter = Voter.get_by_election_and_voter_id(election, voter_id)
......@@ -520,7 +520,8 @@ class VoterFile(models.Model):
# create the voter
if not voter:
voter_uuid = str(uuid.uuid4())
voter = Voter(uuid= voter_uuid, user = None, voter_login_id = voter_id, voter_name = name, election = election)
voter = Voter(uuid= voter_uuid, user = None, voter_login_id = voter_id,
voter_name = name, voter_email = email, election = election)
voter.generate_password()
new_voters.append(voter)
voter.save()
......@@ -546,12 +547,15 @@ class Voter(models.Model, electionalgs.Voter):
# let's link directly to the user now
# voter_type = models.CharField(max_length = 100)
# for users of type password, no user object is created
# but a dynamic user object is created automatically
user = models.ForeignKey('auth.User', null=True)
# if user is null, then you need a voter login ID and password
voter_login_id = models.CharField(max_length = 100, null=True)
voter_password = models.CharField(max_length = 100, null=True)
voter_name = models.CharField(max_length = 200, null=True)
voter_email = models.CharField(max_length = 250, null=True)
uuid = models.CharField(max_length = 50)
......@@ -563,6 +567,13 @@ class Voter(models.Model, electionalgs.Voter):
vote_hash = models.CharField(max_length = 100, null=True)
cast_at = models.DateTimeField(auto_now_add=False, null=True)
def __init__(self, *args, **kwargs):
super(Voter, self).__init__(*args, **kwargs)
# stub the user so code is not full of IF statements
if not self.user:
self.user = User(user_type='password', user_id=self.voter_email, name=self.voter_name)
@classmethod
@transaction.commit_on_success
def register_user_in_election(cls, user, election):
......@@ -617,11 +628,9 @@ class Voter(models.Model, electionalgs.Voter):
@classmethod
def get_by_election_and_voter_id(cls, election, voter_id):
query = cls.objects.filter(election = election, voter_login_id = voter_id)
try:
return query[0]
except:
return cls.objects.get(election = election, voter_login_id = voter_id)
except cls.DoesNotExist:
return None
@classmethod
......@@ -650,31 +659,22 @@ class Voter(models.Model, electionalgs.Voter):
@property
def name(self):
if self.user:
return self.user.name
else:
return self.voter_name
@property
def voter_id(self):
if self.user:
return self.user.user_id
else:
return self.voter_login_id
@property
def voter_type(self):
if self.user:
return self.user.user_type
else:
return 'password'
@property
def display_html_big(self):
if self.user:
return self.user.display_html_big
else:
return """<img border="0" height="25" src="/static/auth/login-icons/password.png" alt="password" /> %s""" % self.name
def send_message(self, subject, body):
self.user.send_message(subject, body)
def generate_password(self, length=10):
if self.voter_password:
......
......@@ -5,8 +5,8 @@ Dear {{voter.name}},
Election URL: {{election_url}}
Election Fingerprint: {{voter.election.hash}}
{% ifequal voter.voter_type "password" %}
Your username: {{voter.user.user_id}}
Your password: {{voter.user.info.password}}
Your username: {{voter.voter_login_id}}
Your password: {{voter.voter_password}}
{% else %}
Log in with your {{voter.voter_type}} account.
{% endifequal %}{% if voter.vote_hash %}
......
......@@ -78,6 +78,23 @@ def stats(request):
return render_template(request, "stats", {'elections' : elections_page.object_list, 'elections_page': elections_page,
'limit' : limit})
def get_voter(request, user, election):
"""
return the current voter
"""
voter = None
if request.session.has_key('CURRENT_VOTER'):
voter = request.session['CURRENT_VOTER']
if voter.election != election:
voter = None
if not voter:
if user:
voter = Voter.get_by_election_and_user(election, user)
return voter
##
## General election features
##
......@@ -475,15 +492,7 @@ def one_election_cast_confirm(request, election):
if not request.session.has_key('encrypted_vote'):
return HttpResponseRedirect(settings.URL_HOST)
voter = None
if request.session.has_key('CURRENT_VOTER'):
voter = request.session['CURRENT_VOTER']
if voter.election != election:
voter = None
if not voter:
if user:
voter = Voter.get_by_election_and_user(election, user)
voter = get_voter(request, user, election)
# auto-register this person if the election is openreg
if user and not voter and election.openreg:
......@@ -593,9 +602,9 @@ def one_election_cast_done(request, election):
We store the ballot hash in the session
"""
user = get_user(request)
voter = get_voter(request, user, election)
if user:
voter = Voter.get_by_election_and_user(election, user)
if voter:
votes = CastVote.get_by_voter(voter)
vote_hash = votes[0].vote_hash
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment