blob: 0bb7a9300dc4b1c811db3f4a4bffab9777dd0ebe [file] [log] [blame]
Scott Baker09cb4182016-05-02 17:21:54 -07001from rest_framework.decorators import api_view
2from rest_framework.response import Response
3from rest_framework.reverse import reverse
4from rest_framework import serializers
5from rest_framework import generics
6from rest_framework.views import APIView
7from core.models import *
8from django.forms import widgets
9from django.core.exceptions import PermissionDenied
10from xos.exceptions import XOSNotFound
11from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
12from django.db.models import Q
13
Scott Baker09cb4182016-05-02 17:21:54 -070014class PortForwardingSerializer(serializers.Serializer):
Scott Baker7a8ee262016-05-02 21:09:50 -070015 id = serializers.IntegerField(read_only=True)
Scott Baker09cb4182016-05-02 17:21:54 -070016 ip = serializers.CharField(read_only=True)
17 ports = serializers.CharField(read_only=True, source="network.ports")
18 hostname = serializers.CharField(read_only=True, source="instance.node.name")
19
20 class Meta:
Scott Baker7a8ee262016-05-02 21:09:50 -070021 model = Port
Scott Baker09cb4182016-05-02 17:21:54 -070022 fields = ('id', 'ip', 'ports', 'hostname')
23
24class PortForwardingViewSet(XOSViewSet):
Scott Bakere8d72472016-05-02 21:04:44 -070025 base_name = "portforwarding"
Scott Baker09cb4182016-05-02 17:21:54 -070026 method_name = "portforwarding"
27 method_kind = "viewset"
28 serializer_class = PortForwardingSerializer
29
30 def get_queryset(self):
Scott Bakere8d72472016-05-02 21:04:44 -070031 queryset=Port.objects.exclude(Q(network__isnull=True) |
32 Q(instance__isnull=True) |
33 Q(instance__node__isnull=True) |
34 Q(network__ports__isnull=True) | Q(network__ports__exact='') |
35 Q(ip__isnull=True))
Scott Baker09cb4182016-05-02 17:21:54 -070036
37 node_name = self.request.query_params.get('node_name', None)
38 if node_name is not None:
39 queryset = queryset.filter(instance__node__name = node_name)
40
Scott Bakere8d72472016-05-02 21:04:44 -070041 if "" in [q.ip for q in list(queryset)]:
42 # Q(ip__exact=='') does not work right, so let's filter the hard way
43 queryset = [q for q in list(queryset) if q.ip!='']
44 queryset = [q.id for q in queryset]
45 queryset = Port.objects.filter(pk__in=queryset)
46
Scott Baker09cb4182016-05-02 17:21:54 -070047 return queryset
48
49