diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index b8a927b6b..737e33b79 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")) @@ -374,7 +375,8 @@ class DomainForm(TabForms): """ if "general" in self.instances: - self.instances["general"].oldname = self.instances["general"].name + instance = self.instances["general"] + instance.oldname = instance.name 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..6fc9be1ca 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): @@ -262,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): diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index ad985f323..81c673dcd 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -432,3 +432,25 @@ 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