opensurvey/main/models.py

46 lines
1.4 KiB
Python

from django.db import models
from openhumans.models import OpenHumansMember
import secrets
import datetime
from django.utils.timezone import now
class SurveyAccount(models.Model):
"""
Store additional data for an Open humans member.
This is a one to one relationship with a OpenHumansMember object.
"""
member = models.OneToOneField(OpenHumansMember, on_delete=models.CASCADE)
survey_token = models.TextField(blank=True, null=True)
last_survey = models.DateField(blank=True, null=True)
last_email = models.DateField(blank=True, null=True)
consent_given = models.BooleanField(default=False)
daily_emails_activated = models.BooleanField(default=True)
language = models.CharField(max_length=5, default='en')
TOKEN_EXPIRATION_MINUTES = 1440 # default expiration is one day
def create_token():
return secrets.token_urlsafe(16)
class ReportToken(models.Model):
member = models.ForeignKey(OpenHumansMember, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
token = models.TextField(default=create_token)
minutes_valid = models.IntegerField(default=TOKEN_EXPIRATION_MINUTES)
def is_valid(self):
expires = self.created + datetime.timedelta(minutes=self.minutes_valid)
if expires > now():
return True
return False
def valid_member(self):
if self.is_valid():
return self.member
return None