-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathhelpers.py
More file actions
112 lines (91 loc) · 3.11 KB
/
helpers.py
File metadata and controls
112 lines (91 loc) · 3.11 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.sites.shortcuts import get_current_site
from django.core.cache import cache
from django.urls import reverse
from django.utils import timezone
from django.utils.timezone import now
from rest_framework_simplejwt.tokens import RefreshToken
from mailing.utils import send_mail
from users.constants import PROTOCOL
from users.models import UserAchievement, UserLink
User = get_user_model()
def verify_email(user, request):
token = RefreshToken.for_user(user).access_token
relative_link = reverse("users:account_email_verification_sent")
current_site = get_current_site(request).domain
absolute_url = f"{PROTOCOL}://{current_site}{relative_link}?token={token}"
template_content = open(
settings.BASE_DIR / "templates/email/confirm-email.html", encoding="utf-8"
).read()
send_mail(
user=user,
subject="Procollab | Подтверждение почты",
template_string=template_content,
template_context={"absolute_url": absolute_url},
)
def send_verification_completed_email(user: User):
template_content = open(
settings.BASE_DIR / "templates/email/verification-succeed.html",
encoding="utf-8",
).read()
send_mail(
user=user,
subject="Procollab | Верификация",
template_string=template_content,
)
def check_related_fields_update(data, pk):
"""
Check if achievements or links were updated and update them.
"""
if data.get("achievements") is not None:
update_achievements(data.get("achievements"), pk)
if data.get("links") is not None:
update_links(data.get("links"), pk)
def update_achievements(achievements, pk):
"""
Bootleg version of updating achievements via user
"""
# delete all old achievements
UserAchievement.objects.filter(user_id=pk).delete()
# create new achievements
UserAchievement.objects.bulk_create(
[
UserAchievement(
user_id=pk,
title=achievement.get("title"),
status=achievement.get("status"),
)
for achievement in achievements
]
)
def update_links(links, pk):
"""
Bootleg version of updating links via user
"""
# delete all old links
UserLink.objects.filter(user_id=pk).delete()
# create new links
UserLink.objects.bulk_create(
[
UserLink(
user_id=pk,
link=link,
)
for link in links
]
)
def force_verify_user(user: User) -> None:
if user.is_active:
return
# todo: send email
user.is_active = True
if hasattr(user, "verification_date"):
user.verification_date = now().date()
user.save()
def check_chache_for_cv(cache_key: str, cooldown_time: int) -> int | None:
cached_timestamp = cache.get(cache_key)
if cached_timestamp:
time_passed = timezone.now() - cached_timestamp
remaining_time = cooldown_time - int(time_passed.total_seconds())
return remaining_time