feat(elections): Pseudonimize tallied elections
This commit is contained in:
parent
3a0d499ba1
commit
fb0e5a8a37
4 changed files with 104 additions and 6 deletions
44
elections/migrations/0035_auto_20240711_1424.py
Normal file
44
elections/migrations/0035_auto_20240711_1424.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Generated by Django 4.2.12 on 2024-07-11 12:24
|
||||
|
||||
import random
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
alphabet = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
||||
|
||||
|
||||
def generate_password(size):
|
||||
random.seed()
|
||||
|
||||
return "".join(random.choice(alphabet) for _ in range(size))
|
||||
|
||||
|
||||
def pseudonymize_users(apps, _):
|
||||
Question = apps.get_model("elections", "Question")
|
||||
Vote = apps.get_model("elections", "Vote")
|
||||
|
||||
votes = set()
|
||||
|
||||
for q in Question.objects.filter(election__tallied=True).prefetch_related(
|
||||
"options__vote_set"
|
||||
):
|
||||
|
||||
for v in q.voters.all():
|
||||
pseudonym = generate_password(16)
|
||||
|
||||
for opt in q.options.all():
|
||||
for vote in opt.vote_set.filter(user=v):
|
||||
vote.pseudonymous_user = pseudonym
|
||||
vote.user = None
|
||||
votes.add(vote)
|
||||
|
||||
Vote.objects.bulk_update(votes, ["pseudonymous_user", "user"])
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("elections", "0034_vote_pseudonymous_user_alter_vote_user"),
|
||||
]
|
||||
|
||||
operations = [migrations.RunPython(pseudonymize_users)]
|
Loading…
Add table
Add a link
Reference in a new issue