In this commit, we stop creating /users and /allows in dimail for our dbs to be in sync. People with stop impersonating users in dimail and will create mailboxes using its own credentials.
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
"""
|
|
Signals module for the mailbox_manager app.
|
|
"""
|
|
|
|
import logging
|
|
from datetime import timedelta
|
|
|
|
from django.conf import settings
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
from django.utils import timezone
|
|
|
|
from core.models import User
|
|
|
|
from mailbox_manager.models import MailDomainAccess, MailDomainInvitation
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@receiver(post_save, sender=User)
|
|
def convert_domain_invitations(sender, created, instance, **kwargs): # pylint: disable=unused-argument
|
|
"""
|
|
Convert valid domain invitations to domain accesses for a given user.
|
|
Expired invitations are ignored.
|
|
"""
|
|
logger.info("Convert domain invitations for user %s", instance)
|
|
if created:
|
|
valid_domain_invitations = MailDomainInvitation.objects.filter(
|
|
email=instance.email,
|
|
created_at__gte=(
|
|
timezone.now()
|
|
- timedelta(seconds=settings.INVITATION_VALIDITY_DURATION)
|
|
),
|
|
)
|
|
|
|
if not valid_domain_invitations.exists():
|
|
return
|
|
|
|
MailDomainAccess.objects.bulk_create(
|
|
[
|
|
MailDomainAccess(
|
|
user=instance, domain=invitation.domain, role=invitation.role
|
|
)
|
|
for invitation in valid_domain_invitations
|
|
]
|
|
)
|
|
|
|
valid_domain_invitations.delete()
|
|
logger.info("Invitations converted to domain accesses for user %s", instance)
|