🐛(maildomain) fix domain access creation
During a new domain creation, a call to dimail is made to create user/allow on dimail side before owner role creation on our side. So when user/allow creation on dimain side fails, the owner role is not created on our side. Therefore the domain is created but invisible on the user interface. The user will probably try to create the same domain again and see the error message 'this domain already exists'. To avoid this we make sure to create owner role on our side despite dimail failure and set domain to failed status to retry later dimail access creation.
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
"""Client serializers for People's mailbox manager app."""
|
||||
|
||||
import json
|
||||
from logging import getLogger
|
||||
|
||||
from requests.exceptions import HTTPError
|
||||
from rest_framework import exceptions, serializers
|
||||
|
||||
from core.api.client.serializers import UserSerializer
|
||||
@@ -10,6 +12,8 @@ from core.models import User
|
||||
from mailbox_manager import enums, models
|
||||
from mailbox_manager.utils.dimail import DimailAPIClient
|
||||
|
||||
logger = getLogger(__name__)
|
||||
|
||||
|
||||
class MailboxSerializer(serializers.ModelSerializer):
|
||||
"""Serialize mailbox."""
|
||||
@@ -190,14 +194,20 @@ class MailDomainAccessSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
dimail = DimailAPIClient()
|
||||
|
||||
user = validated_data["user"]
|
||||
domain = validated_data["domain"]
|
||||
|
||||
if validated_data["role"] in [
|
||||
enums.MailDomainRoleChoices.ADMIN,
|
||||
enums.MailDomainRoleChoices.OWNER,
|
||||
]:
|
||||
dimail.create_user(validated_data["user"].sub)
|
||||
dimail.create_allow(
|
||||
validated_data["user"].sub, validated_data["domain"].name
|
||||
)
|
||||
try:
|
||||
dimail.create_user(user.sub)
|
||||
dimail.create_allow(user.sub, domain.name)
|
||||
except HTTPError:
|
||||
logger.exception("[DIMAIL] access creation failed %s")
|
||||
domain.status = enums.MailDomainStatusChoices.FAILED
|
||||
domain.save()
|
||||
|
||||
return super().create(validated_data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user