diff --git a/api/serializers.py b/api/serializers.py index a4fa57bc..6cc020f3 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -552,6 +552,15 @@ class AdherentSerializer(NamespacedHMSerializer): 'shell': {'view_name': 'shell-detail'} } +class HomeCreationSerializer(NamespacedHMSerializer): + """Serialize 'users.models.User' minimal infos to create home + """ + uid = serializers.IntegerField(source='uid_number') + gid = serializers.IntegerField(source='gid_number') + + class Meta: + model = users.User + fields = ('pseudo', 'uid', 'gid') class ServiceUserSerializer(NamespacedHMSerializer): """Serialize `users.models.ServiceUser` objects. @@ -656,7 +665,7 @@ class LocalEmailUsersSerializer(NamespacedHMSerializer): class FirewallPortListSerializer(serializers.ModelSerializer): class Meta: model = machines.OuverturePort - fields = ('begin', 'end', 'protocole', 'io') + fields = ('begin', 'end', 'protocole', 'io', 'show_port') class FirewallOuverturePortListSerializer(serializers.ModelSerializer): tcp_ports_in = FirewallPortListSerializer(many=True, read_only=True) @@ -673,7 +682,16 @@ class SubnetPortsOpenSerializer(serializers.ModelSerializer): class Meta: model = machines.IpType - fields = ('type', 'domaine_ip_start', 'domaine_ip_stop', 'prefix_v6', 'ouverture_ports') + fields = ('type', 'domaine_ip_start', 'domaine_ip_stop', 'complete_prefixv6', 'ouverture_ports') + +class InterfacePortsOpenSerializer(serializers.ModelSerializer): + port_lists = FirewallOuverturePortListSerializer(read_only=True, many=True) + ipv4 = serializers.CharField(source='ipv4.ipv4', read_only=True) + ipv6 = Ipv6ListSerializer(many=True, read_only=True) + + class Meta: + model = machines.Interface + fields = ('port_lists', 'ipv4', 'ipv6') # DHCP diff --git a/api/urls.py b/api/urls.py index 3bcaee0e..abc466e1 100644 --- a/api/urls.py +++ b/api/urls.py @@ -86,6 +86,7 @@ router.register_viewset(r'topologie/room', views.RoomViewSet) router.register(r'topologie/portprofile', views.PortProfileViewSet) # USERS router.register_viewset(r'users/user', views.UserViewSet) +router.register_viewset(r'users/homecreation', views.HomeCreationViewSet) router.register_viewset(r'users/club', views.ClubViewSet) router.register_viewset(r'users/adherent', views.AdherentViewSet) router.register_viewset(r'users/serviceuser', views.ServiceUserViewSet) @@ -103,6 +104,7 @@ router.register_view(r'dhcp/hostmacip', views.HostMacIpView), router.register_view(r'localemail/users', views.LocalEmailUsersView), # Firewall router.register_view(r'firewall/subnet-ports', views.SubnetPortsOpenView), +router.register_view(r'firewall/interface-ports', views.InterfacePortsOpenView), # DNS router.register_view(r'dns/zones', views.DNSZonesView), router.register_view(r'dns/reverse-zones', views.DNSReverseZonesView), diff --git a/api/views.py b/api/views.py index f284abbe..0f6301bc 100644 --- a/api/views.py +++ b/api/views.py @@ -418,6 +418,11 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet): queryset = users.User.objects.all() serializer_class = serializers.UserSerializer +class HomeCreationViewSet(viewsets.ReadOnlyModelViewSet): + """Exposes infos of `users.models.Users` objects to create homes. + """ + queryset = users.User.objects.all() + serializer_class = serializers.HomeCreationSerializer class ClubViewSet(viewsets.ReadOnlyModelViewSet): """Exposes list and details of `users.models.Club` objects. @@ -544,6 +549,10 @@ class SubnetPortsOpenView(generics.ListAPIView): queryset = machines.IpType.objects.all() serializer_class = serializers.SubnetPortsOpenSerializer +class InterfacePortsOpenView(generics.ListAPIView): + queryset = machines.Interface.objects.filter(port_lists__isnull=False).distinct() + serializer_class = serializers.InterfacePortsOpenSerializer + # DNS diff --git a/machines/models.py b/machines/models.py index cd00203c..139bb7eb 100644 --- a/machines/models.py +++ b/machines/models.py @@ -358,6 +358,11 @@ class IpType(RevMixin, AclMixin, models.Model): else: return None + @cached_property + def complete_prefixv6(self): + """Return the complete prefix v6 as cidr""" + return str(self.prefix_v6) + "/" + str(self.prefix_v6_length) + def ip_objects(self): """ Renvoie tous les objets ipv4 relié à ce type""" return IpList.objects.filter(ip_type=self) diff --git a/users/models.py b/users/models.py index dc2d106c..20115566 100755 --- a/users/models.py +++ b/users/models.py @@ -283,6 +283,11 @@ class User(RevMixin, FieldPermissionModelMixin, AbstractBaseUser, else: raise NotImplementedError("Type inconnu") + @cached_property + def gid_number(self): + """renvoie le gid par défaut des users""" + return int(LDAP['user_gid']) + @cached_property def is_class_club(self): """ Returns True if the object is a Club (subclassing User) """