aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/gui/app/views.py
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2012-11-25 04:21:51 +0000
committerMichael Elkins <melkins@tislabs.com>2012-11-25 04:21:51 +0000
commit6b24f45e97061a7bafa9af1a7efd21311892bcc4 (patch)
tree58dc94da6e4168b4a2ea32659c05fa75993144d6 /rpkid/rpki/gui/app/views.py
parent1b84c1e1febeeb5e0141eb8196b8d7c968d2c514 (diff)
do not display part of the vcard that are disallowed by RFC
add new roa detail view, displaying covered routes use {% url %} to get the url instead of hardcoding it in templates add some missing title params to buttons remove edit button from generic object detail modify labels for validation statuses to use the label- suffix required by bootstrap 2.2.x don't use object_detail for the repository_detail view remove stub get_absolute_url() methods where they were previously used as placeholders svn path=/branches/tk329/; revision=4900
Diffstat (limited to 'rpkid/rpki/gui/app/views.py')
-rw-r--r--rpkid/rpki/gui/app/views.py61
1 files changed, 29 insertions, 32 deletions
diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py
index 05d6380b..1a8be108 100644
--- a/rpkid/rpki/gui/app/views.py
+++ b/rpkid/rpki/gui/app/views.py
@@ -29,11 +29,9 @@ from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, render
from django.utils.http import urlquote
from django import http
-from django.views.generic.list_detail import object_detail
from django.core.urlresolvers import reverse, reverse_lazy
from django.contrib.auth.models import User
from django.views.generic import DetailView, CreateView, UpdateView, DeleteView
-from django.conf import settings
from rpki.irdb import Zookeeper, ChildASN, ChildNet
from rpki.gui.app import models, forms, glue, range_list
@@ -41,7 +39,8 @@ from rpki.resource_set import (resource_range_as, resource_range_ipv4,
resource_range_ipv6, roa_prefix_ipv4)
from rpki import sundial
-from rpki.gui.cacheview.models import ROAPrefixV4, ROAPrefixV6, ROA
+from rpki.gui.cacheview.models import ROAPrefixV4, ROA
+from rpki.gui.routeview.models import RouteOrigin
def superuser_required(f):
@@ -321,9 +320,7 @@ def child_add_prefix(request, pk):
version = 'IPv4'
child.address_ranges.create(start_ip=str(r.min), end_ip=str(r.max),
version=version)
- z = Zookeeper(handle=conf.handle, logstream=logstream)
- if settings.RPKID_RUN:
- z.run_rpkid_now()
+ Zookeeper(handle=conf.handle, logstream=logstream).run_rpkid_now()
return http.HttpResponseRedirect(child.get_absolute_url())
else:
form = forms.AddNetForm(child=child)
@@ -342,9 +339,7 @@ def child_add_asn(request, pk):
asns = form.cleaned_data.get('asns')
r = resource_range_as.parse_str(asns)
child.asns.create(start_as=r.min, end_as=r.max)
- if settings.RPKID_RUN:
- z = Zookeeper(handle=conf.handle, logstream=logstream)
- z.run_rpkid_now()
+ Zookeeper(handle=conf.handle, logstream=logstream).run_rpkid_now()
return http.HttpResponseRedirect(child.get_absolute_url())
else:
form = forms.AddASNForm(child=child)
@@ -373,8 +368,7 @@ def child_edit(request, pk):
# remove AS & prefixes that are not selected in the form
models.ChildASN.objects.filter(child=child).exclude(pk__in=form.cleaned_data.get('as_ranges')).delete()
models.ChildNet.objects.filter(child=child).exclude(pk__in=form.cleaned_data.get('address_ranges')).delete()
- if settings.RPKID_RUN:
- Zookeeper(handle=conf.handle, logstream=log).run_rpkid_now()
+ Zookeeper(handle=conf.handle, logstream=log).run_rpkid_now()
return http.HttpResponseRedirect(child.get_absolute_url())
else:
form = form_class(initial={
@@ -425,6 +419,19 @@ def child_delete(request, pk):
@handle_required
+def roa_detail(request, pk):
+ conf = request.session['handle']
+ obj = get_object_or_404(conf.roas, pk=pk)
+ pfx = obj.prefixes.all()[0].as_resource_range()
+ routes = RouteOrigin.objects.filter(prefix_min__gte=pfx.min,
+ prefix_max__lte=pfx.max)
+ return render(request, 'app/roa_detail.html', {
+ 'object': obj,
+ 'routes': routes,
+ })
+
+
+@handle_required
def roa_create(request):
"""Present the user with a form to create a ROA.
@@ -507,8 +514,7 @@ def roa_create_confirm(request):
roa.prefixes.create(version=v, prefix=str(rng.min),
prefixlen=rng.prefixlen(),
max_prefixlen=max_prefixlen)
- if settings.RPKID_RUN:
- Zookeeper(handle=conf.handle, logstream=log).run_rpkid_now()
+ Zookeeper(handle=conf.handle, logstream=log).run_rpkid_now()
return http.HttpResponseRedirect(reverse(dashboard))
# What should happen when the submission form isn't valid? For now
# just fall through and redirect back to the ROA creation form
@@ -528,8 +534,7 @@ def roa_delete(request, pk):
roa = get_object_or_404(conf.roas, pk=pk)
if request.method == 'POST':
roa.delete()
- if settings.RPKID_RUN:
- Zookeeper(handle=conf.handle).run_rpkid_now()
+ Zookeeper(handle=conf.handle).run_rpkid_now()
return http.HttpResponseRedirect(reverse(dashboard))
### Process GET ###
@@ -620,7 +625,9 @@ def roa_match(rng):
pfx = 'prefixes'
rv = []
- for obj in route_manager.filter(prefix_min__gte=rng.min, prefix_max__lte=rng.max):
+ # return a max of 50 routes
+ for obj in route_manager.filter(prefix_min__gte=rng.min,
+ prefix_max__lte=rng.max)[:50]:
# This is a bit of a gross hack, since the foreign keys for v4 and v6
# prefixes have different names.
args = {'%s__prefix_min__lte' % pfx: obj.prefix_min,
@@ -646,17 +653,17 @@ def validate_route(route, roas):
# 2. if the candidate ROA set is empty, end with unknown
if not roas.exists():
route.status = 'unknown'
- route.status_label = 'warning'
+ route.status_label = 'label-warning'
# 3. if any candidate roa matches the origin AS and max_length, end with
# valid
#
# AS0 is always invalid.
elif route.asn != 0 and roas.filter(**args).exists():
- route.status_label = 'success'
+ route.status_label = 'label-success'
route.status = 'valid'
# 4. otherwise the route is invalid
else:
- route.status_label = 'important'
+ route.status_label = 'label-important'
route.status = 'invalid'
return route
@@ -687,10 +694,6 @@ def route_view(request):
{'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)
@@ -703,9 +706,9 @@ def route_roa_list(request, pk):
@handle_required
def repository_detail(request, pk):
conf = request.session['handle']
- qs = models.Repository.objects.filter(issuer=conf)
- return object_detail(request, queryset=qs, object_id=pk,
- template_name='app/repository_detail.html')
+ return render(request,
+ 'app/repository_detail.html',
+ {'object': get_object_or_404(conf.repositories, pk=pk)})
@handle_required
@@ -798,12 +801,6 @@ def user_list(request):
@superuser_required
-def user_detail(request):
- """Placeholder for Conf.get_absolute_url()."""
- pass
-
-
-@superuser_required
def user_delete(request, pk):
conf = models.Conf.objects.get(pk=pk)
log = request.META['wsgi.errors']