42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.contrib.auth.tokens import default_token_generator
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.utils.encoding import force_bytes
|
|
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
|
|
|
|
|
|
class Util:
|
|
@staticmethod
|
|
def send_email(html_content, **data):
|
|
try:
|
|
email = EmailMultiAlternatives(**data)
|
|
email.attach_alternative(html_content, "text/html")
|
|
email.send()
|
|
except Exception:
|
|
raise Exception("Sending e-mail went wrong")
|
|
|
|
@staticmethod
|
|
def get_token(user):
|
|
|
|
try:
|
|
data = {
|
|
"uidb64": urlsafe_base64_encode(force_bytes(user.pk)),
|
|
"token": default_token_generator.make_token(user)
|
|
}
|
|
except Exception:
|
|
return None
|
|
return data
|
|
|
|
@staticmethod
|
|
def check_token(uidb64, token):
|
|
try:
|
|
User = get_user_model()
|
|
uid = urlsafe_base64_decode(uidb64).decode()
|
|
user = User.objects.get(pk=uid)
|
|
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
|
|
user = None
|
|
|
|
# Check token
|
|
if user is not None and default_token_generator.check_token(user, token):
|
|
return user
|
|
raise Exception("Token invalid") |