|
@@ -0,0 +1,29 @@
|
|
|
+from django.dispatch import receiver
|
|
|
+from django.db.models.signals import post_save
|
|
|
+
|
|
|
+from .models import IPPrefix, IPResource
|
|
|
+
|
|
|
+from ipaddress import ip_address, ip_network
|
|
|
+
|
|
|
+
|
|
|
+@receiver(post_save, sender=IPPrefix, dispatch_uid='ip_prefix')
|
|
|
+def ip_prefix(sender, instance, created, **kwargs):
|
|
|
+ network = ip_network(instance.prefix)
|
|
|
+ for ip in IPResource.objects.all():
|
|
|
+ address = ip_address(ip.ip)
|
|
|
+ if address in network:
|
|
|
+ ip.prefixes.add(instance)
|
|
|
+ else:
|
|
|
+ ip.prefixes.remove(instance)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+@receiver(post_save, sender=IPResource, dispatch_uid='ip_resource')
|
|
|
+def ip_resource(sender, instance, created, **kwargs):
|
|
|
+ address = ip_address(instance.ip)
|
|
|
+ for prefix in IPPrefix.objects.all():
|
|
|
+ network = ip_network(prefix.prefix)
|
|
|
+ if address in network:
|
|
|
+ instance.prefixes.add(prefix)
|
|
|
+ else:
|
|
|
+ instance.prefixes.remove(prefix)
|