Merge pull request #3046 from modoboa/fix/internal_alias_mistake

Only create not internal aliases from account form
This commit is contained in:
Antoine Nguyen
2023-08-28 09:05:32 +02:00
committed by GitHub
2 changed files with 26 additions and 1 deletions
+6 -1
View File
@@ -403,6 +403,7 @@ class AccountFormMail(forms.Form, DynamicForm):
def _update_aliases(self, user, account):
"""Update mailbox aliases."""
# 1. We check if existing aliases were removed...
qset = self.mb.aliasrecipient_set.select_related("alias").filter(
alias__internal=False)
for ralias in qset:
@@ -414,22 +415,26 @@ class AccountFormMail(forms.Form, DynamicForm):
alias.delete()
else:
self.aliases.remove(ralias.alias.address)
# 2. Nothing left to do, return
if not self.aliases:
return
# 3. Check limits at all levels
core_signals.can_create_object.send(
self.__class__, context=user, klass=models.Alias,
count=len(self.aliases))
core_signals.can_create_object.send(
self.__class__, context=self.mb.domain,
object_type="mailbox_aliases", count=len(self.aliases))
# 4. Create / update aliases
for alias in self.aliases:
if self.mb.aliasrecipient_set.select_related("alias").filter(
alias__address=alias).exists():
alias__address=alias, alias__internal=False).exists():
continue
local_part, domname = split_mailbox(alias)
al, _ = models.Alias.objects.get_or_create(
address=alias,
domain=models.Domain.objects.get(name=domname),
internal=False,
defaults={'enabled': account.is_active},
)
al.add_recipients([self.mb.full_address])
+20
View File
@@ -135,6 +135,26 @@ class AccountTestCase(ModoTestCase):
self.ajax_post(reverse("admin:account_add"), values)
self.assertTrue(alias.aliasrecipient_set.count() == 2)
def test_create_alias_on_existing_account(self):
values = {
"email": "tester@test.com",
"username": "tester@test.com",
"role": "SimpleUsers",
"random_password": "on",
"quota_act": True,
"is_active": True,
"stepid": "step2",
"aliases": "user@test.com",
}
self.ajax_post(reverse("admin:account_add"), values)
# Check that internal alias has not been updated
alias = models.Alias.objects.get(
address="user@test.com", internal=True)
self.assertTrue(alias.aliasrecipient_set.count() == 1)
alias = models.Alias.objects.get(
address="user@test.com", internal=False)
self.assertTrue(alias.aliasrecipient_set.count() == 1)
def test_create_disabled_account(self):
"""Check if account and alias are disabled."""
values = {