diff options
author | Michael Elkins <melkins@tislabs.com> | 2012-02-12 16:44:20 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2012-02-12 16:44:20 +0000 |
commit | 3b9c26320c5c00bbce712a6450dcfdf2bd36f1f3 (patch) | |
tree | 9ff544dd2377c697b670bcd829ddc9ac2a366b9c /rpkid/rpki | |
parent | e5189c08dc29441a7039af8190d82f758596cd03 (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.py | 19 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/route_roa_list.html | 17 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/routes_view.html | 7 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/urls.py | 2 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 30 |
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 |