X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/ca8f4e8fef80cb603117ed579da8554f503698e5..37cb52d2e87c491ded0b1f090afd403deaa5e616:/src/api/models.py diff --git a/src/api/models.py b/src/api/models.py index ff1f09a0d..eade03754 100644 --- a/src/api/models.py +++ b/src/api/models.py @@ -1,12 +1,14 @@ # This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Wolne Lektury. See NOTICE for more information. # +from datetime import timedelta +import uuid from django.conf import settings from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.db import models from django.db.models.signals import pre_delete - +from django.utils import timezone from catalogue.models import Book, Tag @@ -101,7 +103,12 @@ class Consumer(models.Model): class Token(models.Model): REQUEST = 1 ACCESS = 2 - TOKEN_TYPES = ((REQUEST, 'Request'), (ACCESS, 'Access')) + REFRESH = 3 + TOKEN_TYPES = ( + (REQUEST, 'Request'), + (ACCESS, 'Access'), + (REFRESH, 'Refresh') + ) key = models.CharField(max_length=KEY_SIZE) secret = models.CharField(max_length=SECRET_SIZE) @@ -116,3 +123,26 @@ class Token(models.Model): def __str__(self): return "%s Token %s for %s" % (self.get_token_type_display(), self.key, self.consumer) + + +class SessionTransferToken(models.Model): + token = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False) + user = models.ForeignKey( + settings.AUTH_USER_MODEL, models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + expires_at = models.DateTimeField() + used = models.BooleanField(default=False) + + @classmethod + def create_for_user(cls, user, lifetime_seconds=30): + return cls.objects.create( + user=user, + expires_at=timezone.now() + timedelta(seconds=lifetime_seconds) + ) + + def is_valid(self): + if self.used: + return False + if timezone.now() > self.expires_at: + return False + return True