|
@@ -180,13 +180,26 @@ class Route(models.Model):
|
|
|
|
|
|
class Tunnel(Route):
|
|
|
description = models.CharField(max_length=128, blank=True)
|
|
|
- created = models.DateTimeField(auto_now_add=True)
|
|
|
+ created = models.DateTimeField(default=timezone.now, verbose_name='Date de création')
|
|
|
+ ended = models.DateTimeField(null=True, blank=True, verbose_name='Date de désactivation')
|
|
|
port = models.IntegerField(null=True, blank=True)
|
|
|
local_ip = models.GenericIPAddressField(null=True, blank=True, verbose_name='IP locale')
|
|
|
remote_ip = models.GenericIPAddressField(null=True, blank=True, verbose_name='IP distante')
|
|
|
networks = models.ManyToManyField(IPPrefix, blank=True, verbose_name='Réseaux')
|
|
|
notes = models.TextField(blank=True, default='')
|
|
|
|
|
|
+ def clean(self):
|
|
|
+ super().clean()
|
|
|
+ if self.ended:
|
|
|
+ # Vérification de la cohérence des champs created et ended
|
|
|
+ if self.created > self.ended:
|
|
|
+ raise ValidationError({'ended': "La date de désactivation doit être postérieur "
|
|
|
+ "à la date de création du tunnel."})
|
|
|
+ elif self.port:
|
|
|
+ # Vérification de l’unicité d’un tunnel actif avec un port donné
|
|
|
+ if Tunnel.objects.exclude(pk=self.pk).filter(port=self.port, ended__isnull=True).exists():
|
|
|
+ raise ValidationError({'port': "Ce numéro de port est déjà utilisé par un autre tunnel."})
|
|
|
+
|
|
|
|
|
|
class Allocation(models.Model):
|
|
|
start = models.DateTimeField(verbose_name='Début de la période d’allocation', default=timezone.now)
|