From de3884276d7c7f8fcc0b00759d4d636f4a5e81c6 Mon Sep 17 00:00:00 2001 From: djime Date: Thu, 4 Oct 2018 15:36:52 +0200 Subject: [PATCH 1/3] Fix for issue #1475 --- modoboa/admin/forms/domain.py | 2 ++ modoboa/admin/handlers.py | 4 ++++ modoboa/admin/tests/test_domain.py | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index b8a927b6b..d1549a4cf 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -53,6 +53,7 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm): def __init__(self, user, *args, **kwargs): self.oldname = None if "instance" in kwargs: + self.old_dkim_key_length = kwargs["instance"].dkim_key_length self.oldname = kwargs["instance"].name super(DomainFormGeneral, self).__init__(*args, **kwargs) params = dict(param_tools.get_global_parameters("admin")) @@ -375,6 +376,7 @@ class DomainForm(TabForms): """ if "general" in self.instances: self.instances["general"].oldname = self.instances["general"].name + self.instances["general"].old_dkim_key_length = self.instances["general"].dkim_key_length return super(DomainForm, self).is_valid() def save(self): diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index 2159f5dd8..3dfbd609a 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -25,6 +25,10 @@ def update_domain_mxs_and_mailboxes(sender, instance, **kwargs): return instance.mailbox_set.filter(use_domain_quota=True).update( quota=instance.default_mailbox_quota) + if instance.old_dkim_key_length != instance.dkim_key_length: + instance.dkim_public_key = "" + instance.dkim_private_key_path = "" + instance.save() if instance.old_mail_homes is None: return qset = ( diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index ad985f323..167fd43d4 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -432,3 +432,24 @@ class DKIMTestCase(ModoTestCase): response = self.client.get(url) self.assertContains( response, escape(domain.bind_format_dkim_public_key)) + + def test_dkim_key_length_modification(self): + """ """ + self.set_global_parameter("dkim_keys_storage_dir", self.workdir) + values = { + "name": "pouet.com", "quota": 1000, "default_mailbox_quota": 100, + "create_dom_admin": False, "type": "domain", "stepid": "step3", + "enable_dkim": True, "dkim_key_selector": "default" + } + self.ajax_post(reverse("admin:domain_add"), values) + call_command("modo", "manage_dkim_keys") + key_path = os.path.join(self.workdir, "{}.pem".format(values["name"])) + self.assertTrue(os.path.exists(key_path)) + dom = Domain.objects.get(name="pouet.com") + values["dkim_key_length"] = 4096 + self.ajax_post(reverse("admin:domain_change", args=[dom.pk]), values) + dom.refresh_from_db() + self.assertEqual(dom.dkim_private_key_path, "") + os.unlink(key_path) + call_command("modo", "manage_dkim_keys") + self.assertTrue(os.path.exists(key_path)) \ No newline at end of file From 469fdadc4775ae5ff54453b71f1ff2b579f8e6fc Mon Sep 17 00:00:00 2001 From: djime Date: Thu, 4 Oct 2018 16:10:08 +0200 Subject: [PATCH 2/3] Fixed unit tests --- modoboa/admin/forms/domain.py | 2 +- modoboa/admin/models/domain.py | 1 + modoboa/admin/tests/test_domain.py | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index d1549a4cf..d08d2563e 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -376,7 +376,7 @@ class DomainForm(TabForms): """ if "general" in self.instances: self.instances["general"].oldname = self.instances["general"].name - self.instances["general"].old_dkim_key_length = self.instances["general"].dkim_key_length + self.instances["general"].old_dkim_key_length = self.instances["general"].dkim_key_length return super(DomainForm, self).is_valid() def save(self): diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 5d14044ba..1d9534423 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -87,6 +87,7 @@ class Domain(AdminObject): super(Domain, self).__init__(*args, **kwargs) self.old_mail_homes = None self.oldname = self.name + self.old_dkim_key_length = self.dkim_key_length @property def domainalias_count(self): diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index 167fd43d4..81c673dcd 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -452,4 +452,5 @@ class DKIMTestCase(ModoTestCase): self.assertEqual(dom.dkim_private_key_path, "") os.unlink(key_path) call_command("modo", "manage_dkim_keys") - self.assertTrue(os.path.exists(key_path)) \ No newline at end of file + self.assertTrue(os.path.exists(key_path)) + \ No newline at end of file From 3ae402426ba19f865b2b50c33d4f36ff542608bc Mon Sep 17 00:00:00 2001 From: djime Date: Thu, 4 Oct 2018 17:43:12 +0200 Subject: [PATCH 3/3] fixed unit tests --- modoboa/admin/forms/domain.py | 4 ++-- modoboa/admin/handlers.py | 4 ---- modoboa/admin/models/domain.py | 3 +++ 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index d08d2563e..737e33b79 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -375,8 +375,8 @@ class DomainForm(TabForms): """ if "general" in self.instances: - self.instances["general"].oldname = self.instances["general"].name - self.instances["general"].old_dkim_key_length = self.instances["general"].dkim_key_length + instance = self.instances["general"] + instance.oldname = instance.name return super(DomainForm, self).is_valid() def save(self): diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index 3dfbd609a..2159f5dd8 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -25,10 +25,6 @@ def update_domain_mxs_and_mailboxes(sender, instance, **kwargs): return instance.mailbox_set.filter(use_domain_quota=True).update( quota=instance.default_mailbox_quota) - if instance.old_dkim_key_length != instance.dkim_key_length: - instance.dkim_public_key = "" - instance.dkim_private_key_path = "" - instance.save() if instance.old_mail_homes is None: return qset = ( diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 1d9534423..6fc9be1ca 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -263,6 +263,9 @@ class Domain(AdminObject): self.old_mail_homes = { mb.id: mb.mail_home for mb in self.mailbox_set.all() } + if self.old_dkim_key_length != self.dkim_key_length: + self.dkim_public_key = "" + self.dkim_private_key_path = "" super(Domain, self).save(*args, **kwargs) def delete(self, fromuser, keepdir=False):