diff options
author | Michael Elkins <melkins@tislabs.com> | 2012-11-26 03:49:18 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2012-11-26 03:49:18 +0000 |
commit | 944d9b4a446c1401268d7ef8efb40b923177be95 (patch) | |
tree | 845333bd85b4826d780d3207202b43305901c873 /rpkid/rpki/gui/app/views.py | |
parent | 6b24f45e97061a7bafa9af1a7efd21311892bcc4 (diff) |
rewrite ghostbuster_{create,edit} not to use generic views
make sure to set the .vcard field when saving a ghostbuster request
display the list of covering ROAs from the rcynic cache in the route detail view
rename route_roa_list to route_detail
remove the delete button from the object_detail.html template since not all objects that use it can be deleted
set STATIC_ROOT in settings.py so that collectstatic works
svn path=/branches/tk329/; revision=4901
Diffstat (limited to 'rpkid/rpki/gui/app/views.py')
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 64 |
1 files changed, 39 insertions, 25 deletions
diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py index 1a8be108..558fac1a 100644 --- a/rpkid/rpki/gui/app/views.py +++ b/rpkid/rpki/gui/app/views.py @@ -31,7 +31,7 @@ from django.utils.http import urlquote from django import http 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.views.generic import DetailView, DeleteView from rpki.irdb import Zookeeper, ChildASN, ChildNet from rpki.gui.app import models, forms, glue, range_list @@ -581,27 +581,37 @@ class GhostbusterDeleteView(GenericDeleteView): return self.request.session['handle'].ghostbusters -class GhostbusterCreateView(CreateView): - form_class = forms.GhostbusterRequestForm - template_name = 'app/app_form.html' - - def get_form_kwargs(self): - kwargs = super(GhostbusterCreateView, self).get_form_kwargs() - kwargs['conf'] = self.request.session['handle'] - return kwargs - +@handle_required +def ghostbuster_create(request): + conf = request.session['handle'] + if request.method == 'POST': + form = forms.GhostbusterRequestForm(request.POST, request.FILES, + conf=conf) + if form.is_valid(): + obj = form.save(commit=False) + obj.vcard = glue.ghostbuster_to_vcard(obj) + obj.save() + return http.HttpResponseRedirect(reverse(dashboard)) + else: + form = forms.GhostbusterRequestForm(conf=conf) + return render(request, 'app/app_form.html', {'form': form}) -class GhostbusterEditView(UpdateView): - form_class = forms.GhostbusterRequestForm - template_name = 'app/app_form.html' - def get_queryset(self): - return self.request.session['handle'].ghostbusters - - def get_form_kwargs(self): - kwargs = super(GhostbusterEditView, self).get_form_kwargs() - kwargs['conf'] = self.request.session['handle'] - return kwargs +@handle_required +def ghostbuster_edit(request, pk): + conf = request.session['handle'] + obj = get_object_or_404(conf.ghostbusters, pk=pk) + if request.method == 'POST': + form = forms.GhostbusterRequestForm(request.POST, request.FILES, + conf=conf, instance=obj) + if form.is_valid(): + obj = form.save(commit=False) + obj.vcard = glue.ghostbuster_to_vcard(obj) + obj.save() + return http.HttpResponseRedirect(reverse(dashboard)) + else: + form = forms.GhostbusterRequestForm(conf=conf, instance=obj) + return render(request, 'app/app_form.html', {'form': form}) @handle_required @@ -694,13 +704,17 @@ def route_view(request): {'routes': routes, 'timestamp': ts}) -def route_roa_list(request, pk): +def route_detail(request, pk): """Show a list of ROAs that match a given route.""" - object = get_object_or_404(models.RouteOrigin, pk=pk) + # FIXME only supports IPv4 routes + route = get_object_or_404(models.RouteOrigin, pk=pk) # select accepted ROAs which cover this route - 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') + # The rpki.net tool only generates a single prefix per ROA, but other tools + # may not, so we generate the list by roa prefix instead + qs = ROAPrefixV4.objects.filter(prefix_min__lte=route.prefix_min, + prefix_max__gte=route.prefix_max).select_related() + return render(request, 'app/route_detail.html', + {'object': route, 'roa_prefixes': qs}) @handle_required |