From 06ae48b73dbccbff36dbc2b0c1fa9d14355f7bbf Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Fri, 23 Jan 2026 18:22:48 -0300 Subject: [PATCH] add network properties to WireGuard instance model --- wireguard/models.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/wireguard/models.py b/wireguard/models.py index 17c3e7e..84a29bb 100644 --- a/wireguard/models.py +++ b/wireguard/models.py @@ -1,3 +1,4 @@ +import ipaddress import uuid from django.db import models @@ -73,6 +74,47 @@ class WireGuardInstance(models.Model): else: return 'wg' + str(self.instance_id) + @property + def network_cidr(self): + try: + network = ipaddress.ip_network( + f"{self.address}/{self.netmask}", + strict=False + ) + return str(network) + except Exception: + return None + + @property + def peer_extra_networks(self): + rows = ( + PeerAllowedIP.objects + .filter( + peer__wireguard_instance=self, + config_file='server', + priority__gte=1 + ) + .values_list('allowed_ip', 'netmask') + .distinct() + .order_by('allowed_ip', 'netmask') + ) + return [f"{ip}/{mask}" for ip, mask in rows] + + @property + def peer_main_addresses(self): + rows = ( + PeerAllowedIP.objects + .filter( + peer__wireguard_instance=self, + config_file='server', + priority=0 + ) + .values_list('allowed_ip', 'netmask') + .distinct() + .order_by('allowed_ip', 'netmask') + ) + return [f"{ip}/{mask}" for ip, mask in rows] + class Peer(models.Model): name = models.CharField(max_length=100, blank=True, null=True)