aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/gui/app/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'rpkid/rpki/gui/app/models.py')
-rw-r--r--rpkid/rpki/gui/app/models.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/rpkid/rpki/gui/app/models.py b/rpkid/rpki/gui/app/models.py
index a2142b4f..64dcc656 100644
--- a/rpkid/rpki/gui/app/models.py
+++ b/rpkid/rpki/gui/app/models.py
@@ -118,6 +118,34 @@ class Conf(rpki.irdb.models.ResourceHolderCA):
def roas(self):
return ROARequest.objects.filter(issuer=self)
+ @property
+ def routes(self):
+ """Return all IPv4 routes covered by RPKI certs issued to this resource
+ holder.
+
+ """
+ # build a Q filter to select all RouteOrigin objects covered by
+ # prefixes in the resource holder's certificates
+ q = models.Q()
+ for p in ResourceRangeAddressV4.objects.filter(cert__conf=self):
+ q |= models.Q(prefix_min__gte=p.prefix_min,
+ prefix_max__lte=p.prefix_max)
+ return RouteOrigin.objects.filter(q)
+
+ @property
+ def routes_v6(self):
+ """Return all IPv6 routes covered by RPKI certs issued to this resource
+ holder.
+
+ """
+ # build a Q filter to select all RouteOrigin objects covered by
+ # prefixes in the resource holder's certificates
+ q = models.Q()
+ for p in ResourceRangeAddressV6.objects.filter(cert__conf=self):
+ q |= models.Q(prefix_min__gte=p.prefix_min,
+ prefix_max__lte=p.prefix_max)
+ return RouteOriginV6.objects.filter(q)
+
class Meta:
proxy = True
@@ -187,6 +215,26 @@ class ROARequest(rpki.irdb.models.ROARequest):
def get_absolute_url(self):
return ('rpki.gui.app.views.roa_detail', [str(self.pk)])
+ @property
+ def routes(self):
+ "Return all IPv4 routes covered by this roa prefix."
+ # this assumes one prefix per ROA
+ rng = self.prefixes.filter(version=4)[0].as_resource_range()
+ return rpki.gui.routeview.models.RouteOrigin.objects.filter(
+ prefix_min__lte=rng.max,
+ prefix_max__gte=rng.min
+ )
+
+ @property
+ def routes_v6(self):
+ "Return all IPv6 routes covered by this roa prefix."
+ # this assumes one prefix per ROA
+ rng = self.prefixes.filter(version=6)[0].as_resource_range()
+ return rpki.gui.routeview.models.RouteOriginV6.objects.filter(
+ prefix_min__lte=rng.max,
+ prefix_max__gte=rng.min
+ )
+
class ROARequestPrefix(rpki.irdb.models.ROARequestPrefix):
class Meta: