Projet

Général

Profil

0002-add-FC-email-verification-token-model-73148.patch

Paul Marillonnet, 18 janvier 2023 16:37

Télécharger (4,04 ko)

Voir les différences:

Subject: [PATCH 2/5] add FC email verification token model (#73148)

 .../0009_fcemailverificationtoken.py          | 40 +++++++++++++++++++
 src/authentic2_auth_fc/models.py              | 32 +++++++++++++++
 2 files changed, 72 insertions(+)
 create mode 100644 src/authentic2_auth_fc/migrations/0009_fcemailverificationtoken.py
src/authentic2_auth_fc/migrations/0009_fcemailverificationtoken.py
1
# Generated by Django 2.2.26 on 2023-01-18 10:54
2

  
3
import uuid
4

  
5
import django.db.models.deletion
6
from django.conf import settings
7
from django.db import migrations, models
8

  
9

  
10
class Migration(migrations.Migration):
11

  
12
    dependencies = [
13
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
        ('authentic2_auth_fc', '0008_fcauthenticator_link_by_email'),
15
    ]
16

  
17
    operations = [
18
        migrations.CreateModel(
19
            name='FcEmailVerificationToken',
20
            fields=[
21
                (
22
                    'id',
23
                    models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
24
                ),
25
                ('value', models.UUIDField(default=uuid.uuid4, verbose_name='Token value')),
26
                ('created', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')),
27
                ('expires', models.DateTimeField(verbose_name='Expires')),
28
                ('sent', models.BooleanField(default=False, verbose_name='Token sent')),
29
                (
30
                    'user',
31
                    models.ForeignKey(
32
                        on_delete=django.db.models.deletion.CASCADE,
33
                        related_name='fc_email_verification_tokens',
34
                        to=settings.AUTH_USER_MODEL,
35
                        verbose_name='user',
36
                    ),
37
                ),
38
            ],
39
        ),
40
    ]
src/authentic2_auth_fc/models.py
14 14
# You should have received a copy of the GNU Affero General Public License
15 15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 16

  
17
import datetime
17 18
import json
19
import uuid
18 20

  
19 21
from django.conf import settings
20 22
from django.contrib.postgres.fields import ArrayField
21 23
from django.db import models
24
from django.utils import timezone
22 25
from django.utils.functional import cached_property
23 26
from django.utils.translation import gettext_lazy as _
24 27

  
......
184 187
            ('sub', 'order'),
185 188
            ('user', 'order'),
186 189
        ]
190

  
191

  
192
class FcEmailVerificationToken(models.Model):
193
    DURATION = 60 * 60 * 24 * 2  # 48 hours
194
    value = models.UUIDField(
195
        verbose_name=_('Token value'),
196
        default=uuid.uuid4,
197
    )
198
    created = models.DateTimeField(verbose_name=_('Creation date'), auto_now_add=True)
199
    expires = models.DateTimeField(verbose_name=_('Expires'))
200
    sent = models.BooleanField(default=False, verbose_name=_('Token sent'))
201
    user = models.ForeignKey(
202
        to=settings.AUTH_USER_MODEL,
203
        verbose_name=_('user'),
204
        related_name='fc_email_verification_tokens',
205
        on_delete=models.CASCADE,
206
    )
207

  
208
    @classmethod
209
    def cleanup(cls, now=None):
210
        now = now or timezone.now()
211
        cls.objects.filter(expires__lte=now).delete()
212

  
213
    @classmethod
214
    def create(cls, user, expires=None, duration=None):
215
        if not duration:
216
            duration = cls.DURATION
217
        expires = expires or (timezone.now() + datetime.timedelta(seconds=duration))
218
        return cls.objects.create(user=user, expires=expires)
187
-