Refactoring

This commit is contained in:
Spitap
2023-08-27 12:17:10 +02:00
parent 365a97edcc
commit 5905198cac
4 changed files with 37 additions and 45 deletions
-1
View File
@@ -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'
+9 -6
View File
@@ -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:
+1 -5
View File
@@ -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",
]
+27 -33
View File
@@ -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."""