From c4324d08c625f67a15016e48e12109e8d8fa1b58 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 20 Mar 2024 11:43:45 +0100 Subject: [PATCH 1/2] Added missing permission view_domainalias to DomainAdmins group --- .../migrations/0023_auto_20240320_1037.py | 25 +++++++++++++++++++ modoboa/core/constants.py | 1 + .../management/commands/load_initial_data.py | 3 ++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 modoboa/admin/migrations/0023_auto_20240320_1037.py diff --git a/modoboa/admin/migrations/0023_auto_20240320_1037.py b/modoboa/admin/migrations/0023_auto_20240320_1037.py new file mode 100644 index 000000000..776e10de5 --- /dev/null +++ b/modoboa/admin/migrations/0023_auto_20240320_1037.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.11 on 2024-03-20 10:37 + +from django.db import migrations + + +def set_missing_permission(apps, schema_editor): + Permission = apps.get_model("auth", "Permission") + Group = apps.get_model("auth", "Group") + group = Group.objects.filter(name="DomainAdmins").first() + if not group: + # Fresh install, nothing to do + return + perm = Permission.objects.get(codename="view_domainalias") + group.permissions.add(perm) + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin", "0022_alter_alarm_domain"), + ] + + operations = [ + migrations.RunPython(set_missing_permission, migrations.RunPython.noop), + ] diff --git a/modoboa/core/constants.py b/modoboa/core/constants.py index e407a4ed7..612682e07 100644 --- a/modoboa/core/constants.py +++ b/modoboa/core/constants.py @@ -78,6 +78,7 @@ ["admin", "senderaddress", "add_senderaddress"], ["admin", "senderaddress", "change_senderaddress"], ["admin", "senderaddress", "delete_senderaddress"], + ["admin", "domainalias", "view_domainalias"], ], "Resellers": [ ["core", "user", "add_user"], diff --git a/modoboa/core/management/commands/load_initial_data.py b/modoboa/core/management/commands/load_initial_data.py index 3a19086f6..8f22d5806 100644 --- a/modoboa/core/management/commands/load_initial_data.py +++ b/modoboa/core/management/commands/load_initial_data.py @@ -1,4 +1,5 @@ -"""A management command to load Modoboa initial data: +""" +A management command to load Modoboa initial data. * Create a default super admin if none exists * Create groups and permissions From 8e08b36131268c3590afefea6ca9e1e00037c14c Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 20 Mar 2024 12:13:45 +0100 Subject: [PATCH 2/2] Fixed tests --- modoboa/admin/api/v1/serializers.py | 2 - modoboa/admin/api/v1/tests.py | 7 ++- .../migrations/0027_alter_user_language.py | 45 +++++++++++++++++++ modoboa/core/models.py | 6 ++- 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 modoboa/core/migrations/0027_alter_user_language.py diff --git a/modoboa/admin/api/v1/serializers.py b/modoboa/admin/api/v1/serializers.py index 8582cd576..5c8e11283 100644 --- a/modoboa/admin/api/v1/serializers.py +++ b/modoboa/admin/api/v1/serializers.py @@ -470,8 +470,6 @@ def create(self, validated_data): else: password = validated_data.pop("password") user.set_password(password) - if "language" not in validated_data: - user.language = settings.LANGUAGE_CODE user.save(creator=creator) if mailbox_data: self._create_mailbox(creator, user, mailbox_data) diff --git a/modoboa/admin/api/v1/tests.py b/modoboa/admin/api/v1/tests.py index 3cc1fd953..69d3b0715 100644 --- a/modoboa/admin/api/v1/tests.py +++ b/modoboa/admin/api/v1/tests.py @@ -6,6 +6,7 @@ import dns.resolver +from django.core.cache import cache from django.test import override_settings from django.urls import reverse @@ -25,7 +26,7 @@ class DomainAPITestCase(ModoAPITestCase): @classmethod def setUpTestData(cls): # NOQA:N802 """Create test data.""" - super(DomainAPITestCase, cls).setUpTestData() + super().setUpTestData() factories.populate_database() cls.da_token = Token.objects.create( user=core_models.User.objects.get(username="admin@test.com") @@ -258,6 +259,10 @@ def setUp(self): {"enable_admin_limits": False, "enable_domain_limits": False}, app="limits" ) + def tearDown(self): + # Make sure API calls do not get throttled + cache.clear() + def test_get_accounts(self): """Retrieve a list of accounts.""" url = reverse("v1:account-list") diff --git a/modoboa/core/migrations/0027_alter_user_language.py b/modoboa/core/migrations/0027_alter_user_language.py new file mode 100644 index 000000000..e38372e4f --- /dev/null +++ b/modoboa/core/migrations/0027_alter_user_language.py @@ -0,0 +1,45 @@ +# Generated by Django 4.2.11 on 2024-03-20 11:11 + +from django.db import migrations, models +import modoboa.core.models + + +class Migration(migrations.Migration): + + dependencies = [ + ("core", "0026_alter_localconfig__parameters_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="language", + field=models.CharField( + choices=[ + ("br", "breton"), + ("cs", "čeština"), + ("de", "deutsch"), + ("en", "english"), + ("el", "ελληνικά"), + ("es", "español"), + ("fi", "Suomalainen"), + ("fr", "français"), + ("it", "italiano"), + ("ja", "日本の"), + ("nl", "nederlands"), + ("pt", "português"), + ("pt-br", "português (BR)"), + ("pl", "polski"), + ("ro", "Română"), + ("ru", "русский"), + ("sv", "svenska"), + ("tr", "türk"), + ("zh-hant", "中文(台灣)"), + ], + default=modoboa.core.models.get_default_language, + help_text="Prefered language to display pages.", + max_length=10, + verbose_name="language", + ), + ), + ] diff --git a/modoboa/core/models.py b/modoboa/core/models.py index ad794881a..fabcca31f 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -36,6 +36,10 @@ ldap_available = False +def get_default_language() -> str: + return settings.LANGUAGE_CODE + + class User(AbstractUser): """Custom User model. @@ -61,7 +65,7 @@ class User(AbstractUser): language = models.CharField( gettext_lazy("language"), max_length=10, - default="en", + default=get_default_language, choices=constants.LANGUAGES, help_text=gettext_lazy("Prefered language to display pages."), )