Skip to content
Snippets Groups Projects

Improve automatic emails with temporary urls

Merged Flavio TARSETTI requested to merge 542_temporary_urls into master
Files
2
@@ -29,9 +29,18 @@ from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
import random
import string
import datetime
# ------------------------------------------------------------------------------
# Constants
TEMPORARY_URL_LENGTH = 32
# ------------------------------------------------------------------------------
class AccountSettingsManager(models.Manager):
@@ -149,3 +158,64 @@ def create_user_profile(sender, instance, created, **kwargs):
def save_user_profile(sender, instance, **kwargs):
player, created = Profile.objects.get_or_create(user=instance)
instance.profile.save()
def generate_url_hash():
# url_hash creation
url_hash = "".join(
random.choice(string.ascii_letters + string.digits) # nosec
for _ in range(TEMPORARY_URL_LENGTH)
)
return url_hash
class TemporaryUrlManager(models.Manager):
def create_temporary_url(self, status, supervision_track):
# Actions that result creating the object
url_hash = generate_url_hash()
used_hashes = [x.url_hash for x in TemporaryUrl.objects.all()]
while url_hash in used_hashes:
url_hash = generate_url_hash()
now = datetime.datetime.now()
expiration_date_delta = datetime.timedelta(
days=settings.ACCOUNT_ACTIVATION_DAYS_FROM_SUPERVISOR
)
expires = now + expiration_date_delta
temporary_url = self.model(
status=status,
url_hash=url_hash,
expires=expires,
supervision_track=supervision_track,
)
temporary_url.save()
return temporary_url
class TemporaryUrl(models.Model):
# _____ Constants __________
# Supervisor validates supervisee
# Self yearly revalidation from supervisee
VALIDATION = "V"
YEARREVALIDATION = "Y"
REJECTION = "R"
URL_STATUS = (
(VALIDATION, "Supervisor validates supervisee"),
(YEARREVALIDATION, "Self yearly revalidation from supervisee"),
(REJECTION, "Supervisor rejects supervisee revalidation"),
)
# _____ Fields __________
status = models.CharField(max_length=1, choices=URL_STATUS, default=VALIDATION)
url_hash = models.CharField("Url", blank=False, max_length=32, unique=True)
expires = models.DateTimeField("Expires")
supervision_track = models.ForeignKey(
SupervisionTrack, on_delete=models.CASCADE, related_name="supervisees"
)
objects = TemporaryUrlManager()
Loading