aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2012-02-12 16:44:20 +0000
committerMichael Elkins <melkins@tislabs.com>2012-02-12 16:44:20 +0000
commit3b9c26320c5c00bbce712a6450dcfdf2bd36f1f3 (patch)
tree9ff544dd2377c697b670bcd829ddc9ac2a366b9c /rpkid/rpki
parente5189c08dc29441a7039af8190d82f758596cd03 (diff)
add link to display roas covering a bgp prefix in the routes view
svn path=/branches/tk161/; revision=4327
Diffstat (limited to 'rpkid/rpki')
-rw-r--r--rpkid/rpki/gui/app/models.py19
-rw-r--r--rpkid/rpki/gui/app/templates/app/route_roa_list.html17
-rw-r--r--rpkid/rpki/gui/app/templates/app/routes_view.html7
-rw-r--r--rpkid/rpki/gui/app/urls.py2
-rw-r--r--rpkid/rpki/gui/app/views.py30
5 files changed, 63 insertions, 12 deletions
diff --git a/rpkid/rpki/gui/app/models.py b/rpkid/rpki/gui/app/models.py
index e551ee4b..f026bbfd 100644
--- a/rpkid/rpki/gui/app/models.py
+++ b/rpkid/rpki/gui/app/models.py
@@ -21,6 +21,7 @@ import rpki.resource_set
import rpki.exceptions
import rpki.irdb.models
import rpki.gui.models
+import rpki.gui.routeview.models
class TelephoneField(models.CharField):
@@ -250,3 +251,21 @@ class Client(rpki.irdb.models.Client):
def __unicode__(self):
return self.handle
+
+
+class RouteOrigin(rpki.gui.routeview.models.RouteOrigin):
+ class Meta:
+ proxy = True
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('rpki.gui.app.views.route_detail', [str(self.pk)])
+
+
+class RouteOriginV6(rpki.gui.routeview.models.RouteOriginV6):
+ class Meta:
+ proxy = True
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('rpki.gui.app.views.route_detail', [str(self.pk)])
diff --git a/rpkid/rpki/gui/app/templates/app/route_roa_list.html b/rpkid/rpki/gui/app/templates/app/route_roa_list.html
new file mode 100644
index 00000000..ad8b11f6
--- /dev/null
+++ b/rpkid/rpki/gui/app/templates/app/route_roa_list.html
@@ -0,0 +1,17 @@
+{% extends "app/object_table.html" %}
+
+{% block table_header %}
+<th>Prefix</th>
+<th>Max Length</th>
+<th>ASN</th>
+<th>Expires</th>
+<th>URI</th>
+{% endblock %}
+
+{% block object_detail %}
+<td>{{ object.as_resource_range }}</td>
+<td>{{ object.max_length }}</td>
+<td>{{ object.roas.all.0.asid }}</td>
+<td>{{ object.roas.all.0.not_after }}</td>
+<td>{{ object.roas.all.0.uri }}</td>
+{% endblock object_detail %}
diff --git a/rpkid/rpki/gui/app/templates/app/routes_view.html b/rpkid/rpki/gui/app/templates/app/routes_view.html
index d85a5175..be4f8f6e 100644
--- a/rpkid/rpki/gui/app/templates/app/routes_view.html
+++ b/rpkid/rpki/gui/app/templates/app/routes_view.html
@@ -30,11 +30,12 @@ This view shows currently advertised routes for the prefixes listed in resource
<tr>
<td>{{ r.get_prefix_display }}</td>
<td>{{ r.asn }}</td>
- <td><span class='label {{ r.status_label }}'>{{ r.status }}</span></td>
+ <td>
+ <span class='label {{ r.status_label }}'>{{ r.status }}</span>
+ <a href='{{ r.get_absolute_url }}/roa/' help='display ROAs matching this prefix'>roas</a>
+ </td>
</tr>
{% endfor %}
</table>
{% endblock %}
-
-<!-- vim: set sw=2: -->
diff --git a/rpkid/rpki/gui/app/urls.py b/rpkid/rpki/gui/app/urls.py
index b9cdbaa0..52da02d9 100644
--- a/rpkid/rpki/gui/app/urls.py
+++ b/rpkid/rpki/gui/app/urls.py
@@ -57,6 +57,8 @@ urlpatterns = patterns('',
(r'^roa/(?P<pk>\d+)$', views.roa_detail),
(r'^roa/(?P<pk>\d+)/delete$', views.roa_delete),
(r'^routes/$', views.route_view),
+ (r'^routes/(?P<pk>\d+)$', views.route_detail),
+ (r'^routes/(?P<pk>\d+)/roa/$', views.route_roa_list),
(r'^update_bpki', views.update_bpki),
(r'^user/$', views.user_list),
(r'^user/create$', views.user_create),
diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py
index 912d227e..1163a958 100644
--- a/rpkid/rpki/gui/app/views.py
+++ b/rpkid/rpki/gui/app/views.py
@@ -42,8 +42,8 @@ from rpki.resource_set import (resource_range_as, resource_range_ipv4,
from rpki.exceptions import BadIPResource
from rpki import sundial
-import rpki.gui.cacheview.models
-import rpki.gui.routeview.models
+from rpki.gui.cacheview.models import (ROAPrefixV4, ROAPrefixV6,
+ ValidationLabel, ROA)
def superuser_required(f):
@@ -720,13 +720,13 @@ def roa_match(rng):
Return a list of tuples of matching routes and roas.
"""
- object_accepted = rpki.gui.cacheview.models.ValidationLabel.objects.get(label='object_accepted')
+ object_accepted = ValidationLabel.objects.get(label='object_accepted')
if isinstance(rng, resource_range_ipv6):
- route_manager = rpki.gui.routeview.models.RouteOriginV6.objects
+ route_manager = models.RouteOriginV6.objects
pfx = 'prefixes_v6'
else:
- route_manager = rpki.gui.routeview.models.RouteOrigin.objects
+ route_manager = models.RouteOrigin.objects
pfx = 'prefixes'
rv = []
@@ -735,9 +735,8 @@ def roa_match(rng):
# prefixes have different names.
args = {'%s__prefix_min__lte' % pfx: obj.prefix_min,
'%s__prefix_max__gte' % pfx: obj.prefix_max}
- roas = rpki.gui.cacheview.models.ROA.objects.filter(
- statuses__status=object_accepted,
- **args)
+ roas = ROA.objects.filter(statuses__status=object_accepted,
+ **args)
rv.append((obj, roas))
return rv
@@ -749,7 +748,7 @@ def validate_route(route, roas):
`roas` is a queryset containing ROAs which cover `route`.
"""
- pfx = 'prefixes' if isinstance(route, rpki.gui.routeview.models.RouteOrigin) else 'prefixes_v6'
+ pfx = 'prefixes' if isinstance(route, models.RouteOrigin) else 'prefixes_v6'
args = {'asid': route.asn,
'%s__prefix_min__lte' % pfx: route.prefix_min,
'%s__prefix_max__gte' % pfx: route.prefix_max,
@@ -797,6 +796,19 @@ def route_view(request):
ts = dict((attr['name'], attr['ts']) for attr in models.Timestamp.objects.values())
return render(request, 'app/routes_view.html',
{'routes': routes, 'timestamp': ts})
+
+
+def route_detail(request, pk):
+ pass
+
+
+def route_roa_list(request, pk):
+ """Show a list of ROAs that match a given route."""
+ object = get_object_or_404(models.RouteOrigin, pk=pk)
+ qs = ROAPrefixV4.objects.filter(prefix_min__lte=object.prefix_min,
+ prefix_max__gte=object.prefix_max).select_related()
+ return object_list(request, qs, template_name='app/route_roa_list.html')
+
@handle_required