mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-19 05:58:34 +02:00
+20
-8
@@ -5,7 +5,7 @@ from django.contrib.contenttypes.models import ContentType
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import list_route
|
||||
from rest_framework.exceptions import ParseError
|
||||
from rest_framework.permissions import DjangoModelPermissions
|
||||
from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions
|
||||
from rest_framework.response import Response
|
||||
|
||||
from modoboa.core import models as core_models
|
||||
@@ -17,7 +17,7 @@ from . import serializers
|
||||
class DomainViewSet(viewsets.ModelViewSet):
|
||||
"""ViewSet for Domain."""
|
||||
|
||||
permission_classes = [DjangoModelPermissions, ]
|
||||
permission_classes = [IsAuthenticated, DjangoModelPermissions, ]
|
||||
serializer_class = serializers.DomainSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
@@ -32,18 +32,22 @@ class DomainViewSet(viewsets.ModelViewSet):
|
||||
class DomainAliasViewSet(viewsets.ModelViewSet):
|
||||
"""ViewSet for DomainAlias."""
|
||||
|
||||
permission_classes = [DjangoModelPermissions, ]
|
||||
permission_classes = [IsAuthenticated, DjangoModelPermissions, ]
|
||||
serializer_class = serializers.DomainAliasSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
"""Filter queryset based on current user."""
|
||||
return models.DomainAlias.objects.get_for_admin(self.request.user)
|
||||
queryset = models.DomainAlias.objects.get_for_admin(self.request.user)
|
||||
domain = self.request.query_params.get("domain")
|
||||
if domain:
|
||||
queryset = queryset.filter(target__name=domain)
|
||||
return queryset
|
||||
|
||||
|
||||
class AccountViewSet(viewsets.ModelViewSet):
|
||||
"""ViewSet for User/Mailbox."""
|
||||
|
||||
permission_classes = [DjangoModelPermissions, ]
|
||||
permission_classes = [IsAuthenticated, DjangoModelPermissions, ]
|
||||
|
||||
def get_serializer_class(self):
|
||||
"""Return a serializer."""
|
||||
@@ -57,7 +61,11 @@ class AccountViewSet(viewsets.ModelViewSet):
|
||||
ids = user.objectaccess_set \
|
||||
.filter(content_type=ContentType.objects.get_for_model(user)) \
|
||||
.values_list('object_id', flat=True)
|
||||
return core_models.User.objects.filter(pk__in=ids)
|
||||
queryset = core_models.User.objects.filter(pk__in=ids)
|
||||
domain = self.request.query_params.get("domain")
|
||||
if domain:
|
||||
queryset = queryset.filter(mailbox__domain__name=domain)
|
||||
return queryset
|
||||
|
||||
def perform_destroy(self, instance):
|
||||
"""Add custom args to delete call."""
|
||||
@@ -80,7 +88,7 @@ class AccountViewSet(viewsets.ModelViewSet):
|
||||
class AliasViewSet(viewsets.ModelViewSet):
|
||||
"""ViewSet for Alias."""
|
||||
|
||||
permission_classes = [DjangoModelPermissions, ]
|
||||
permission_classes = [IsAuthenticated, DjangoModelPermissions, ]
|
||||
serializer_class = serializers.AliasSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
@@ -91,4 +99,8 @@ class AliasViewSet(viewsets.ModelViewSet):
|
||||
content_type=ContentType.objects.get_for_model(models.Alias))
|
||||
.values_list('object_id', flat=True)
|
||||
)
|
||||
return models.Alias.objects.filter(pk__in=ids)
|
||||
queryset = models.Alias.objects.filter(pk__in=ids)
|
||||
domain = self.request.query_params.get("domain")
|
||||
if domain:
|
||||
queryset = queryset.filter(domain__name=domain)
|
||||
return queryset
|
||||
|
||||
@@ -70,6 +70,9 @@ class AccountSerializer(serializers.ModelSerializer):
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Adapt fields to current user."""
|
||||
super(AccountSerializer, self).__init__(*args, **kwargs)
|
||||
request = self.context.get("request")
|
||||
if not request:
|
||||
return
|
||||
user = self.context["request"].user
|
||||
if not user.is_superuser:
|
||||
del self.fields["master_user"]
|
||||
@@ -95,6 +98,9 @@ class WritableAccountSerializer(AccountSerializer):
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Adapt fields to current user."""
|
||||
super(WritableAccountSerializer, self).__init__(*args, **kwargs)
|
||||
request = self.context.get("request")
|
||||
if not request:
|
||||
return
|
||||
user = self.context["request"].user
|
||||
self.fields["role"] = serializers.ChoiceField(
|
||||
choices=permissions.get_account_roles(user))
|
||||
|
||||
@@ -113,6 +113,11 @@ class DomainAliasAPITestCase(ModoAPITestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data["name"], "dalias1.com")
|
||||
|
||||
url = reverse("external_api:domain_alias-list")
|
||||
response = self.client.get("{}?domain=test.com".format(url))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(len(response.data), 1)
|
||||
|
||||
self.client.credentials(
|
||||
HTTP_AUTHORIZATION='Token ' + self.da_token.key)
|
||||
response = self.client.get(reverse("external_api:domain_alias-list"))
|
||||
@@ -194,6 +199,16 @@ class AccountAPITestCase(ModoAPITestCase):
|
||||
response = json.loads(response.content)
|
||||
self.assertEqual(len(response), 5)
|
||||
|
||||
response = self.client.get("{}?domain=test.com".format(url))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response = json.loads(response.content)
|
||||
self.assertEqual(len(response), 2)
|
||||
|
||||
response = self.client.get("{}?domain=pouet.com".format(url))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response = json.loads(response.content)
|
||||
self.assertEqual(len(response), 0)
|
||||
|
||||
def test_create_account(self):
|
||||
"""Try to create a new account."""
|
||||
url = reverse("external_api:account-list")
|
||||
@@ -380,6 +395,11 @@ class AliasAPITestCase(ModoAPITestCase):
|
||||
response = json.loads(response.content)
|
||||
self.assertEqual(len(response), 3)
|
||||
|
||||
response = self.client.get("{}?domain=test.com".format(url))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response = json.loads(response.content)
|
||||
self.assertEqual(len(response), 3)
|
||||
|
||||
def test_get_alias(self):
|
||||
"""Retrieve an alias."""
|
||||
al = models.Alias.objects.get(address="alias@test.com")
|
||||
|
||||
Reference in New Issue
Block a user