Merge pull request #2042 from modoboa/fix/forward_with_no_local_copies

Make sure to disable/enable self alias according to forward settings.
This commit is contained in:
Antoine Nguyen
2020-10-23 09:04:07 +02:00
committed by GitHub
2 changed files with 39 additions and 10 deletions
+13
View File
@@ -34,9 +34,22 @@ class ForwardTestCase(ModoTestCase):
domadmin = User.objects.get(username="admin@test.com")
self.assertTrue(domadmin.can_access(forward))
selfalias = Alias.objects.get(address="user@test.com", internal=True)
self.assertTrue(selfalias.enabled)
# Deactivate local copies
self.ajax_post(
url,
{"dest": "user@extdomain.com", "keepcopies": False}
)
selfalias.refresh_from_db()
self.assertFalse(selfalias.enabled)
# Now, empty forward
self.ajax_post(url, {"dest": "", "keepcopies": False})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
content = response.json()
self.assertNotIn("user@extdomain.com", content["content"])
selfalias.refresh_from_db()
self.assertTrue(selfalias.enabled)
+26 -10
View File
@@ -21,18 +21,34 @@ def forward(request, tplname="admin/forward.html"):
if request.method == "POST":
form = ForwardForm(request.POST)
if form.is_valid():
if al is None:
al = Alias.objects.create(
address=mb.full_address, domain=mb.domain,
enabled=mb.user.is_active)
recipients = form.cleaned_data["dest"]
if form.cleaned_data["keepcopies"]:
recipients.append(mb.full_address)
al.set_recipients(recipients)
if len(recipients) == 0:
al.delete()
if not recipients:
Alias.objects.filter(
address=mb.full_address, internal=False).delete()
# Make sure internal self-alias is enabled
Alias.objects.filter(
address=mb.full_address, internal=True
).update(enabled=True)
else:
al.post_create(request.user)
if al is None:
al = Alias.objects.create(
address=mb.full_address,
domain=mb.domain,
enabled=mb.user.is_active
)
al.post_create(request.user)
if form.cleaned_data["keepcopies"]:
# Make sure internal self-alias is enabled
Alias.objects.filter(
address=mb.full_address, internal=True
).update(enabled=True)
else:
# Deactivate internal self-alias to avoid storing
# local copies...
Alias.objects.filter(
address=mb.full_address, internal=True
).update(enabled=False)
al.set_recipients(recipients)
return render_to_json_response(_("Forward updated"))
return render_to_json_response(