aboutsummaryrefslogtreecommitdiff
path: root/services/users/accountFunctions.py
blob: 036b549acf8e66be0b157a385e468bcf90383748 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import secrets
import uuid

from django.utils import timezone

from services.users.models import TokenStore, UserProfile


def generate_token():
    uid = uuid.uuid4().hex
    token = secrets.token_urlsafe(32)
    print(uid, token)
    return uid, token


def store_token(token_type, user, email=None):
    previous_tokens = TokenStore.objects.filter(user=user, token_type=token_type)
    if previous_tokens.exists():
        previous_tokens.delete()
    uid, token = generate_token()
    token_store = TokenStore.objects.create(
        user=user,
        email=email if email is not None else user.email,
        uid=uid,
        token=token,
        token_type=token_type,
        expires=timezone.now() + timezone.timedelta(minutes=30),
    )
    token_store.save()
    return uid, token


def verify_token(token_type, uid, token, hold_verification=False):
    try:
        token_store = TokenStore.objects.get(
            token_type=token_type, uid=uid, token=token
        )
        if (
            token_store.expires > timezone.now()
            and not token_store.verified
            and token_store.token_type == token_type
            and token_store.uid == uid
            and token_store.token == token
        ):

            if hold_verification:
                return token_store
            token_store.verified = True

            if token_type == "verifyemail":
                UserProfile.objects.filter(user=token_store.user).update(
                    email_verified=True
                )

            token_store.save()

        return token_store
    except TokenStore.DoesNotExist:
        return None