diff --git a/docker-compose.yml b/docker-compose.yml
index 695b86a7d..ebdb40952 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -3,7 +3,7 @@ version: '3'
services:
api:
container_name: modoboa_api
- restart: always
+ restart: unless-stopped
build:
context: .
dockerfile: docker/Dockerfile.dev
@@ -24,7 +24,7 @@ services:
front:
container_name: modoboa_front
- restart: always
+ restart: unless-stopped
build:
context: .
dockerfile: docker/Dockerfile.front.dev
diff --git a/frontend/src/components/imap_migration/ProviderAssociatedForm.vue b/frontend/src/components/imap_migration/ProviderAssociatedForm.vue
index b57b027df..37f0c62d0 100644
--- a/frontend/src/components/imap_migration/ProviderAssociatedForm.vue
+++ b/frontend/src/components/imap_migration/ProviderAssociatedForm.vue
@@ -2,14 +2,14 @@
-
- {{domain.name}} --> {{domain.new_domain}}
+ {{domain.name}} --> {{domain.new_domain.name}}
- {{domain.name}} --> {{domain.name}}
+ {{domain.name}}
diff --git a/frontend/src/components/imap_migration/ProvidersList.vue b/frontend/src/components/imap_migration/ProvidersList.vue
index 57f2e7058..f01209554 100644
--- a/frontend/src/components/imap_migration/ProvidersList.vue
+++ b/frontend/src/components/imap_migration/ProvidersList.vue
@@ -66,7 +66,7 @@
:key="index"
>
- {{domain.name}} --> {{domain.new_domain}}
+ {{domain.name}} --> {{domain.new_domain.name}}
{{domain.name}} --> {{domain.name}}
diff --git a/frontend/src/components/layout/Navbar.vue b/frontend/src/components/layout/Navbar.vue
index 9e1935d2e..953b73dd4 100644
--- a/frontend/src/components/layout/Navbar.vue
+++ b/frontend/src/components/layout/Navbar.vue
@@ -205,7 +205,7 @@ export default {
children: [
{
text: this.$gettext('Email providers'),
- to: { name: 'ProvdiersList' },
+ to: { name: 'ProvidersList' },
roles: ['SuperAdmins', 'Resellers']
},
{
diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js
index 2c42d97ef..24d1d2b18 100644
--- a/frontend/src/router/index.js
+++ b/frontend/src/router/index.js
@@ -67,7 +67,7 @@ const routes = [
},
{
path: '/imap_migration/providers',
- name: 'ProvdiersList',
+ name: 'ProvidersList',
component: () => import('../views/imap_migration/Providers.vue'),
meta: {
requiresAuth: true,
diff --git a/modoboa/admin/api/v1/serializers.py b/modoboa/admin/api/v1/serializers.py
index 71c01e10e..abe9d0cbb 100644
--- a/modoboa/admin/api/v1/serializers.py
+++ b/modoboa/admin/api/v1/serializers.py
@@ -116,9 +116,6 @@ class DomainAliasSerializer(serializers.ModelSerializer):
class Meta:
model = admin_models.DomainAlias
fields = ("pk", "name", "target", "enabled", )
- expandable_fields = {
- "target": DomainSerializer
- }
def validate_target(self, value):
"""Check target domain."""
diff --git a/modoboa/imap_migration/api/v1/serializers.py b/modoboa/imap_migration/api/v1/serializers.py
index bf0cc6a60..c1399d302 100644
--- a/modoboa/imap_migration/api/v1/serializers.py
+++ b/modoboa/imap_migration/api/v1/serializers.py
@@ -13,11 +13,7 @@ class EmailProviderDomainSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
class Meta:
- extra_kwargs = {
- "name": {
- "validators": []
- }
- }
+ depth = 1
fields = ("id", "name", "new_domain")
model = models.EmailProviderDomain
diff --git a/modoboa/imap_migration/api/v2/serializers.py b/modoboa/imap_migration/api/v2/serializers.py
index 60e9180de..17b2f54fe 100644
--- a/modoboa/imap_migration/api/v2/serializers.py
+++ b/modoboa/imap_migration/api/v2/serializers.py
@@ -1,8 +1,10 @@
-"""APIv2 serializers."""
+"""API v2 serializers."""
from django.utils.translation import gettext_lazy as _
+
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
+
from modoboa.admin.models.domain import Domain
@@ -37,13 +39,14 @@ class CheckAssociatedDomainSerializer(serializers.Serializer):
"""A serializer for checking associated domains."""
initialdomain = serializers.CharField()
- new_domain = serializers.CharField()
-
- def validate(self, data):
- if data["initialdomain"] != data["new_domain"]:
- if not Domain.objects.filter(name=data["initialdomain"]):
- raise ValidationError({"new_domain": [
- _("You must create the local domain first.")]
- })
- return data
+ new_domain = serializers.PrimaryKeyRelatedField(
+ read_only=True, required=False)
+ def validate_new_domain(self, value):
+ domain_ids = (
+ Domain.objects.get_for_admin(self.context["request"].user)
+ .values_list("id", flat=True)
+ )
+ if value not in domain_ids:
+ raise serializers.ValidationError(_("Access denied"))
+ return value