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") payment_permissions = Permission.objects.filter( content_type__model="payment" ).exclude(codename="delete_payment") for permission in device_permissions: instance.user_permissions.add(permission) instance.user_permissions.add(atoll_read_permission, island_read_permission) for permission in payment_permissions: instance.user_permissions.add(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()