diff options
author | Michael Elkins <melkins@tislabs.com> | 2010-10-19 23:52:50 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2010-10-19 23:52:50 +0000 |
commit | f4e6e7bec34a5fc6419930f2cf11ec63c5ff731a (patch) | |
tree | 8960154378e6aa081ac9061669e1734805f1c399 /portal-gui | |
parent | e3f7f7b6cfe355af89d5b8b9581497cc2cd96005 (diff) |
add support for download the myrpki.xml file; fix problem with superuser not being able to download for any resource handle
svn path=/portal-gui/rpkigui/myrpki/urls.py; revision=3481
Diffstat (limited to 'portal-gui')
-rw-r--r-- | portal-gui/rpkigui/myrpki/urls.py | 4 | ||||
-rw-r--r-- | portal-gui/rpkigui/myrpki/views.py | 34 |
2 files changed, 24 insertions, 14 deletions
diff --git a/portal-gui/rpkigui/myrpki/urls.py b/portal-gui/rpkigui/myrpki/urls.py index 64d1888e..f172319c 100644 --- a/portal-gui/rpkigui/myrpki/urls.py +++ b/portal-gui/rpkigui/myrpki/urls.py @@ -40,9 +40,9 @@ urlpatterns = patterns('', (r'^asn/(?P<pk>\d+)/allocate$', views.asn_allocate_view), (r'^roa/(?P<pk>\d+)/delete$', views.roa_request_delete_view), (r'^demo/down/asns/(?P<self_handle>[^/]+)$', views.download_asns), + (r'^demo/down/myrpki/(?P<self_handle>[^/]+)$', views.download_myrpki_xml), (r'^demo/down/prefixes/(?P<self_handle>[^/]+)$', views.download_prefixes), - (r'^demo/down/roas/(?P<self_handle>[^/]+)$', views.download_roas), - (r'^demo/up/myrpki/(?P<self_handle>[^/]+)$', views.upload_myrpki) + (r'^demo/down/roas/(?P<self_handle>[^/]+)$', views.download_roas) ) # vim:sw=4 ts=8 expandtab diff --git a/portal-gui/rpkigui/myrpki/views.py b/portal-gui/rpkigui/myrpki/views.py index 68c8868e..bc08b35a 100644 --- a/portal-gui/rpkigui/myrpki/views.py +++ b/portal-gui/rpkigui/myrpki/views.py @@ -451,20 +451,29 @@ def asn_allocate_view(request, pk): return render('myrpki/asn_view.html', { 'form': form, 'asn': obj, 'form': form, 'parent': parent_set }, request) -@login_required -def download_csv(request, self_handle, fname): - #ensure the requested handle is available to this user - conf_set = models.Conf.objects.filter(owner=request.user, handle=self_handle) +# this is similar to handle_required, except that the handle is given in URL +def handle_or_404(request, handle): + "ensure the requested handle is available to this user" + if request.user.is_superuser: + conf_set = models.Conf.objects.filter(handle=handle) + else: + conf_set = models.Conf.objects.filter(owner=request.user, handle=handle) if not conf_set: - raise http.Http404, 'no such resource handle' - conf = conf_set[0] - fname = fname + '.csv' - content, mtime = glue.read_file_from_handle(conf.handle, fname) - resp = http.HttpResponse(content , mimetype='text/csv') + raise http.Http404, 'resource handle not found' + return conf_set[0] + +def serve_file(handle, fname, content_type): + content, mtime = glue.read_file_from_handle(handle, fname) + resp = http.HttpResponse(content , mimetype=content_type) resp['Content-Disposition'] = 'attachment; filename=%s' % (fname, ) resp['Last-Modified'] = email.utils.formatdate(mtime, usegmt=True) return resp +@login_required +def download_csv(request, self_handle, fname): + conf = handle_or_404(request, self_handle) + return serve_file(conf.handle, fname + '.csv', 'text/csv') + def download_asns(request, self_handle): return download_csv(request, self_handle, 'asns') @@ -475,8 +484,9 @@ def download_prefixes(request, self_handle): return download_csv(request, self_handle, 'prefixes') @login_required -def upload_myrpki(request, self_handle): - "handles POST of the myrpki.xml file for a given handle." - raise http.Http404, 'not implemented' +def download_myrpki_xml(request, self_handle): + "handles GET of the myrpki.xml file for a given resource handle." + conf = handle_or_404(request, self_handle) + return serve_file(conf.handle, 'myrpki.xml', 'application/xml') # vim:sw=4 ts=8 expandtab |