mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-02-22 16:32:01 +00:00
- Added `wallet_balance` field to the User model. - Updated UserAdmin to include `wallet_balance` in the admin interface. - Created serializers and views for Atoll and Island management. - Implemented endpoints for listing, creating, and updating Atolls and Islands. - Enhanced payment processing with UUIDs for Payment and Topup models. - Added migration files for new fields and constraints. - Improved error handling and validation in various views. - Updated email templates for better responsiveness and SEO.
68 lines
2.6 KiB
Python
68 lines
2.6 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")
|
|
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()
|