From e3fe8b469b12d9fa52483e8133de203239404e4b Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Fri, 23 Jan 2026 19:41:53 -0300 Subject: [PATCH] add template_routes property to RoutingTemplate for dynamic route generation --- routing_templates/models.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/routing_templates/models.py b/routing_templates/models.py index aeabe76..aae8758 100644 --- a/routing_templates/models.py +++ b/routing_templates/models.py @@ -4,6 +4,8 @@ from django.db import models, transaction from django.utils.translation import gettext_lazy as _ from wireguard.models import WireGuardInstance +from wireguard.models import WireGuardInstance, PeerAllowedIP +from wireguard_tools.networks import normalize_cidr_list class RoutingTemplate(models.Model): @@ -44,3 +46,29 @@ class RoutingTemplate(models.Model): .exclude(pk=self.pk) .update(default_template=False) ) + + @property + def template_routes(self): + if self.route_type == 'default': + return ['0.0.0.0/0'] + + routes = [] + + if self.route_type == 'peer_same_instance': + if self.wireguard_instance.network_cidr: + routes.append(self.wireguard_instance.network_cidr) + routes.extend(self.wireguard_instance.peer_announced_networks) + + elif self.route_type == 'peer_all_instances': + for wg in WireGuardInstance.objects.all().order_by('instance_id'): + if wg.network_cidr and wg.network_cidr not in routes: + routes.append(wg.network_cidr) + routes.extend(wg.peer_announced_networks) + + if self.custom_routes: + for raw_line in self.custom_routes.splitlines(): + line = (raw_line or '').strip() + if line: + routes.append(line) + + return normalize_cidr_list(routes)