diff --git a/frontend/src/layouts/admin/AdminLayout.vue b/frontend/src/layouts/admin/AdminLayout.vue index 18f529a7e..c03c9cd8f 100644 --- a/frontend/src/layouts/admin/AdminLayout.vue +++ b/frontend/src/layouts/admin/AdminLayout.vue @@ -24,6 +24,10 @@ const imapMigrationEnabled = computed( () => parametersStore.imapMigrationEnabled ) +const openRspamdDashboard = () => { + router.push(rspamdUrl.value) +} + const settings = [] const adminMenuItems = [ { @@ -136,8 +140,4 @@ onMounted(() => { }) } }) - -const openRspamdDashboard = () => { - router.push(rspamdUrl.value) -} diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index d3e1014ab..4b8977ed0 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -5,7 +5,7 @@ from django.test import override_settings from django.urls import reverse from modoboa.core import factories as core_factories -from modoboa.core.models import User, LocalConfig +from modoboa.core.models import User from modoboa.core.tests import test_ldap from modoboa.lib.tests import NO_LDAP, ModoAPITestCase from modoboa.limits import utils as limits_utils @@ -46,6 +46,32 @@ class AccountTestCase(ModoAPITestCase): super().setUpTestData() factories.populate_database() + def test_random_password(self): + # Setting allow_special_characters to False + self.localconfig.parameters.set_value("allow_special_characters", False, "core") + random_password_length = self.localconfig.parameters.get_value( + "random_password_length", "core" + ) + self.localconfig.save() + + random_password = lib.make_password() + self.assertEqual(len(random_password), random_password_length) + self.assertEqual( + len([char for char in random_password if char in list(string.punctuation)]), + 0, + ) + + # And with allow_special_characters to True + self.localconfig.parameters.set_value("allow_special_characters", True, "core") + self.localconfig.save() + + random_password = lib.make_password() + self.assertEqual(len(random_password), random_password_length) + self.assertNotEqual( + len([char for char in random_password if char in list(string.punctuation)]), + 0, + ) + def test_aliases_update_on_disable(self): """Check if aliases are disabled when account is disabled.""" account = User.objects.get(username="user@test.com") diff --git a/modoboa/core/password_hashers/utils.py b/modoboa/core/password_hashers/utils.py index a317f9104..a852f0cba 100644 --- a/modoboa/core/password_hashers/utils.py +++ b/modoboa/core/password_hashers/utils.py @@ -61,7 +61,7 @@ def get_dovecot_schemes(): return [f"{{{smart_str(scheme)}}}" for scheme in schemes.split()], status -def cache_available_password_hasher(bypass_cache=False): +def cache_available_password_hasher(bypass_cache: bool = False): available_schemes, status = get_dovecot_schemes() password_scheme_choice = [ (hasher.name, hasher.label)