diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 381ca41b4..682acdf3a 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -238,7 +238,8 @@ class DomainFormOptions(forms.Form): core_signals.can_create_object.send( self.__class__, context=user, object_type="mailboxes") da = User(username=username, email=username, is_active=True) - da.set_password("password") + da.set_password( + param_tools.get_global_parameter("default_password", app="core")) da.save() da.role = "DomainAdmins" da.post_create(user) diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index 12b6954b0..f7f4b886f 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -99,6 +99,30 @@ class DomainTestCase(ModoTestCase): ) self.assertTrue(da.can_access(al)) + def test_create_with_template_and_custom_password(self): + """Test creation of a domain with a template and custom password.""" + self.set_global_parameter("default_password", "Toto1234", app="core") + values = { + "name": "pouet.com", "quota": 0, "create_dom_admin": True, + "dom_admin_username": "toto", "create_aliases": True, + "type": "domain", "stepid": 'step3' + } + self.ajax_post( + reverse("admin:domain_add"), + values + ) + dom = Domain.objects.get(name="pouet.com") + da = User.objects.get(username="toto@pouet.com") + self.assertIn(da, dom.admins) + al = Alias.objects.get(address="postmaster@pouet.com") + self.assertTrue( + al.aliasrecipient_set.filter(r_mailbox=da.mailbox) + .exists() + ) + self.assertTrue(da.can_access(al)) + self.assertTrue( + self.client.login(username="toto@pouet.com", password="Toto1234")) + def test_create_using_default_quota(self): self.set_global_parameter("default_domain_quota", 50) values = { diff --git a/modoboa/core/app_settings.py b/modoboa/core/app_settings.py index 471b36478..fe3810dbb 100644 --- a/modoboa/core/app_settings.py +++ b/modoboa/core/app_settings.py @@ -3,6 +3,8 @@ from django import forms from django.conf import settings from django.utils.translation import ugettext as _, ugettext_lazy +from passwords import validators + from modoboa.lib import fields as lib_fields from modoboa.lib.cryptutils import random_key from modoboa.lib.form_utils import ( @@ -72,6 +74,14 @@ class GeneralParametersForm(param_forms.AdminParametersForm): widget=forms.TextInput(attrs={"class": "form-control"}) ) + default_password = forms.CharField( + label=ugettext_lazy("Default password"), + initial="password", + help_text=ugettext_lazy( + "Default password for automatically created accounts."), + validators=[validators.validate_length, validators.complexity] + ) + # LDAP specific settings ldap_sep = SeparatorField(label=ugettext_lazy("LDAP settings")) diff --git a/modoboa/core/management/commands/load_initial_data.py b/modoboa/core/management/commands/load_initial_data.py index d9df3d803..cfbd367f4 100644 --- a/modoboa/core/management/commands/load_initial_data.py +++ b/modoboa/core/management/commands/load_initial_data.py @@ -19,8 +19,7 @@ from ... import signals class Command(BaseCommand): - - """Command defintion.""" + """Command definition.""" help = "Load Modoboa initial data"