66 lines
2.5 KiB
Python
66 lines
2.5 KiB
Python
from __future__ import unicode_literals
|
|
import logging
|
|
from rest_framework.decorators import list_route
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
from rest_framework import status, filters, viewsets
|
|
|
|
from dpdapi.filters import AliasRegexFilterBackend
|
|
from dpdapi.models import Alias, Domain, User
|
|
from dpdapi.serializers import AliasSerializer, AliasIdSerializer, DomainSerializer, UserSerializer
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AliasViewSet(viewsets.ModelViewSet):
|
|
""" Aliases """
|
|
queryset = Alias.objects.all()
|
|
serializer_class = AliasSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
filter_backends = (filters.DjangoFilterBackend, AliasRegexFilterBackend)
|
|
filter_fields = ('domain', 'domain__name',)
|
|
|
|
@list_route(methods=['post'])
|
|
def create_bulk(self, request):
|
|
serializer = AliasSerializer(data=request.data, many=True)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
@list_route(methods=['delete'])
|
|
def delete_bulk(self, request):
|
|
# FIXME, accept [{source: kak@stry.no, destination: lol@lol.com}] instead of IDs
|
|
serializer = AliasIdSerializer(data=request.data, many=True)
|
|
if not serializer.is_valid():
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
ids = map(lambda x: x['id'], serializer.initial_data) # FIXME this might not be too great
|
|
aliases = Alias.objects.filter(id__in=ids)
|
|
diff = set(ids).difference(set(aliases.values_list('id', flat=True)))
|
|
logger.debug('Deleted: {}'.format(','.join(map(unicode, aliases))))
|
|
aliases.delete()
|
|
|
|
if diff:
|
|
res = "ID's '{}' could not be found and were not deleted.".format(", ".join(map(unicode, diff)))
|
|
logger.info(res)
|
|
result = res
|
|
return Response({"result": result}, status=status.HTTP_200_OK)
|
|
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
|
|
class DomainViewSet(viewsets.ModelViewSet):
|
|
""" Domains """
|
|
queryset = Domain.objects.all()
|
|
serializer_class = DomainSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
|
|
class UserViewSet(viewsets.ModelViewSet):
|
|
""" Users """
|
|
queryset = User.objects.all()
|
|
serializer_class = UserSerializer
|
|
permission_classes = [IsAuthenticated]
|