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