Parcourir la source

gestions des préfix IP

Élie Bouttier il y a 7 ans
Parent
commit
fe5ca8df33
3 fichiers modifiés avec 56 ajouts et 1 suppressions
  1. 19 0
      services/admin.py
  2. 25 0
      services/migrations/0030_auto_20170612_1339.py
  3. 12 1
      services/models.py

+ 19 - 0
services/admin.py

@@ -144,6 +144,24 @@ class ServiceAdmin(admin.ModelAdmin):
         return False
 
 
+class IPPrefixAdmin(admin.ModelAdmin):
+    readonly_fields = ('prefix',)
+
+    def has_delete_permission(self, request, obj=None):
+        # Interdiction de supprimer le préfix s’il est assigné à une route
+        if obj and obj.route_set.exists():
+            return False
+        else:
+            return True
+
+    # pour embêcher de by-passer le check has_delete_permission, on désactive l’action delete
+    def get_actions(self, request):
+        actions = super().get_actions(request)
+        if 'delete_selected' in actions:
+            del actions['delete_selected']
+        return actions
+
+
 class IPResourceAdmin(admin.ModelAdmin):
     list_display = ('__str__', 'available_display', 'last_use',)
     list_filter = (
@@ -277,6 +295,7 @@ class AntennaAdmin(geo_admin.OSMGeoAdmin):
 
 admin.site.register(ServiceType, ServiceTypeAdmin)
 admin.site.register(Service, ServiceAdmin)
+admin.site.register(IPPrefix, IPPrefixAdmin)
 admin.site.register(IPResource, IPResourceAdmin)
 admin.site.register(Route, RouteAdmin)
 geo_admin.site.register(Antenna, AntennaAdmin)

+ 25 - 0
services/migrations/0030_auto_20170612_1339.py

@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2017-06-12 11:39
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import services.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('services', '0029_route'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='ipprefix',
+            options={'ordering': ['prefix'], 'verbose_name': 'Réseau', 'verbose_name_plural': 'Réseaux'},
+        ),
+        migrations.AlterField(
+            model_name='ipprefix',
+            name='prefix',
+            field=models.CharField(max_length=128, unique=True, validators=[services.models.ipprefix_validator], verbose_name='Préfixe'),
+        ),
+    ]

+ 12 - 1
services/models.py

@@ -11,16 +11,27 @@ from django.utils import timezone
 from django.core.exceptions import PermissionDenied
 from django.core.validators import RegexValidator
 
+from ipaddress import ip_network
+
 from djadhere.utils import get_active_filter, is_overlapping
 from adhesions.models import Adhesion
 from banking.models import Payment
 
 
+def ipprefix_validator(value):
+    try:
+        ip_network(value)
+    except ValueError:
+        raise ValidationError('%s n’est pas un préfixe valide' % value)
+
+
 class IPPrefix(models.Model):
-    prefix = models.CharField(max_length=128)
+    prefix = models.CharField(max_length=128, verbose_name='Préfixe', validators=[ipprefix_validator], unique=True)
 
     class Meta:
         ordering = ['prefix']
+        verbose_name = 'Réseau'
+        verbose_name_plural = 'Réseaux'
 
     def __str__(self):
         return self.prefix