0002-add-FC-email-verification-token-model-73148.patch
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 |
- |