aboutsummaryrefslogtreecommitdiff
path: root/users/accountFunctions.py
blob: 38bc7099b49321e127f86af7a21694ade04d531b (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
import secrets
import uuid

from django.utils import timezone

from 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