From 5905198cac71c6886d548a31bf2d9daa0e34c954 Mon Sep 17 00:00:00 2001 From: Spitap Date: Sun, 27 Aug 2023 11:32:43 +0200 Subject: [PATCH] Refactoring --- frontend/src/mixins/importExport.js | 1 - modoboa/admin/api/v2/serializers.py | 15 +++++--- modoboa/admin/models/__init__.py | 6 +-- modoboa/admin/models/alias.py | 60 +++++++++++++---------------- 4 files changed, 37 insertions(+), 45 deletions(-) diff --git a/frontend/src/mixins/importExport.js b/frontend/src/mixins/importExport.js index 9307d76ed..12139d036 100644 --- a/frontend/src/mixins/importExport.js +++ b/frontend/src/mixins/importExport.js @@ -19,7 +19,6 @@ export const importExportMixin = { bus.$emit('notification', { msg: resp.data.message, type: 'error' }) } }).catch(error => { - console.error(error) bus.$emit('notification', { msg: this.$gettext('CSV seems to be badly formatted'), type: 'error' diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index 343fa61fc..cf0dd9dfa 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -543,7 +543,7 @@ class WritableAccountSerializer(v1_serializers.WritableAccountSerializer): self.set_permissions(user, domains) if aliases: for alias in aliases: - models.modify_or_create_alias( + models.alias.modify_or_create_alias( address="{}@{}".format(alias["localpart"], alias["domain"]), recipients=[user.username], creator=creator, @@ -576,8 +576,8 @@ class WritableAccountSerializer(v1_serializers.WritableAccountSerializer): # We create a list to keep track of alias we need to delete alias_recipients = instance.mailbox.alias_addresses for alias in aliases: - address="{}@{}".format(alias["localpart"], alias["domain"]) - models.modify_or_create_alias( + address = "{}@{}".format(alias["localpart"], alias["domain"]) + models.alias.modify_or_create_alias( address=address, recipients=[validated_data["username"]], creator=creator, @@ -587,9 +587,12 @@ class WritableAccountSerializer(v1_serializers.WritableAccountSerializer): alias_recipients.remove(address) except ValueError: continue - for alias in alias_recipients: - models.remove_recipient_from_alias( - alias, validated_data["username"]) + for alias_address in alias_recipients: + alias = models.Alias.objects.filter( + address=alias_address, internal=False) + if alias.exists(): + alias.first().remove_recipient_from_alias( + validated_data["username"]) instance.save() resources = validated_data.get("resources") if resources: diff --git a/modoboa/admin/models/__init__.py b/modoboa/admin/models/__init__.py index 6dcfc1c40..0b749b51a 100644 --- a/modoboa/admin/models/__init__.py +++ b/modoboa/admin/models/__init__.py @@ -4,9 +4,7 @@ from .alarm import Alarm from .alias import ( Alias, AliasRecipient, - validate_alias_address, - modify_or_create_alias, - remove_recipient_from_alias) + validate_alias_address) from .base import AdminObject from .domain import Domain from .domain_alias import DomainAlias @@ -27,6 +25,4 @@ __all__ = [ "Quota", "SenderAddress", "validate_alias_address", - "modify_or_create_alias", - "remove_recipient_from_alias", ] diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index c37e98aee..6d3485435 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -56,39 +56,6 @@ def validate_alias_address( return local_part, domain -def modify_or_create_alias(address, recipients, creator, domain): - """Add recipient if the alias already exists or create it.""" - - alias = Alias.objects.filter(address=address, internal=False) - if alias.exists(): - alias.first().add_recipients(recipients) - else: - Alias.objects.create( - creator=creator, - domain=domain, - address=address, - recipients=recipients - ) - - -def remove_recipient_from_alias(address, recipient_to_delete): - """Delete the selected recipient from an alias - or delete the whole alias if only one is left.""" - alias = Alias.objects.filter( - address=address, internal=False) - if alias.exists(): - alias_recipients = list(alias.first().recipients) - if recipient_to_delete in alias_recipients: - if len(alias_recipients) == 1: - # Only recipient, we delete the AliasExists - alias.delete() - else: - alias_recipients.remove(recipient_to_delete) - alias = alias.first() - alias.set_recipients(alias_recipients) - alias.save() - - class AliasManager(models.Manager): """Custom manager for Alias.""" @@ -103,6 +70,20 @@ class AliasManager(models.Manager): alias.set_recipients(recipients) return alias + def modify_or_create_alias(self, address, recipients, creator, domain): + """Add recipient if the alias already exists or create it.""" + + alias = Alias.objects.filter(address=address, internal=False) + if alias.exists(): + alias.first().add_recipients(recipients) + else: + self.create( + creator=creator, + domain=domain, + address=address, + recipients=recipients + ) + class Alias(AdminObject): """Mailbox alias.""" @@ -227,6 +208,19 @@ class Alias(AdminObject): kwargs["r_mailbox"] = rcpt AliasRecipient(**kwargs).save() + def remove_recipient_from_alias(self, recipient_to_delete): + """Delete the selected recipient from an alias + or delete the whole alias if only one is left.""" + alias_recipients = list(self.recipients) + if recipient_to_delete in alias_recipients: + if len(alias_recipients) == 1: + # Only recipient, we delete the AliasExists + self.delete() + else: + alias_recipients.remove(recipient_to_delete) + self.set_recipients(alias_recipients) + self.save() + def set_recipients(self, address_list): """Set recipients for this alias."""