mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-02-23 06:12:01 +00:00
62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
|
from django.core.mail import EmailMultiAlternatives
|
||
|
from django.dispatch import receiver
|
||
|
from django.template.loader import render_to_string
|
||
|
from decouple import config
|
||
|
from django_rest_passwordreset.signals import reset_password_token_created
|
||
|
from django.db.models.signals import post_save
|
||
|
from api.models import User
|
||
|
from django.contrib.auth.models import Permission
|
||
|
|
||
|
@receiver(post_save, sender=User)
|
||
|
def assign_device_permissions(sender, instance, created, **kwargs):
|
||
|
if created:
|
||
|
# Assign all permissions for devices and read permission for atoll and island
|
||
|
device_permissions = Permission.objects.filter(content_type__model='device')
|
||
|
atoll_read_permission = Permission.objects.get(codename='view_atoll')
|
||
|
island_read_permission = Permission.objects.get(codename='view_island')
|
||
|
|
||
|
for permission in device_permissions:
|
||
|
instance.user_permissions.add(permission)
|
||
|
instance.user_permissions.add(atoll_read_permission, island_read_permission)
|
||
|
|
||
|
|
||
|
@receiver(reset_password_token_created)
|
||
|
def password_reset_token_created(
|
||
|
sender, instance, reset_password_token, *args, **kwargs
|
||
|
):
|
||
|
"""
|
||
|
Handles password reset tokens
|
||
|
When a token is created, an e-mail needs to be sent to the user
|
||
|
:param sender: View Class that sent the signal
|
||
|
:param instance: View Instance that sent the signal
|
||
|
:param reset_password_token: Token Model Object
|
||
|
:param args:
|
||
|
:param kwargs:
|
||
|
:return:
|
||
|
"""
|
||
|
context = {
|
||
|
"current_user": reset_password_token.user,
|
||
|
"username": reset_password_token.user.username,
|
||
|
"email": reset_password_token.user.email,
|
||
|
"reset_password_url": f"{config('FRONTEND_URL')}/auth/reset-password-confirm/?token={reset_password_token.key}",
|
||
|
}
|
||
|
|
||
|
# render email text
|
||
|
email_html_message = render_to_string("email/password_reset_email.html", context)
|
||
|
email_plaintext_message = (
|
||
|
f"Here is your password reset link: {context['reset_password_url']}"
|
||
|
)
|
||
|
|
||
|
msg = EmailMultiAlternatives(
|
||
|
# title:
|
||
|
"Password Reset for {title}".format(title="Sarlink Portal"),
|
||
|
# message:
|
||
|
email_plaintext_message, # This is the plaintext version
|
||
|
# from:
|
||
|
"noreply@sarlink.net",
|
||
|
# to:
|
||
|
[reset_password_token.user.email],
|
||
|
)
|
||
|
msg.attach_alternative(email_html_message, "text/html")
|
||
|
msg.send()
|