from django.views.generic.edit import CreateView from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.messages.views import SuccessMessageMixin from rest_framework.response import Response from django.shortcuts import render from rest_framework import viewsets, permissions from .models import * from .serializers import * from .selectors import * from .services import * from .forms import * from .tasks import * class WireGuardVPNViewSet(viewsets.ModelViewSet): serializer_class = WireGuardVPNSerializer permission_classes = [permissions.IsAuthenticated] def get_queryset(self): if self.request.user.is_superuser: obj = WireGuardVPN.objects.all() else: obj = WireGuardVPN.objects.filter(owner=self.request.user) return obj def create(self, request): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) vpn = create_wireguard_vpn( owner=self.request.user, public_key=serializer.validated_data['wireguard_public_key'], network_mask=serializer.validated_data['network_mask'] ) return Response(WireGuardVPNSerializer(vpn).data) class WireGuardVPNCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): model = WireGuardVPN login_url = '/login/' success_url = '/' success_message = "%(network) was created successfully" form_class = WireGuardVPNForm def get_success_message(self, cleaned_data): return self.success_message % dict(cleaned_data, the_prefix = self.object.prefix) class WireGuardVPNSizes(viewsets.ViewSet): def list(self, request): sizes = allowed_vpn_network_reservation_size() print(sizes) sizes = [ { 'size': size } for size in sizes ] print(sizes) return Response(WireGuardVPNSizesSerializer(sizes, many=True).data)