aboutsummaryrefslogtreecommitdiff
path: root/portal-gui
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2010-10-19 23:52:50 +0000
committerMichael Elkins <melkins@tislabs.com>2010-10-19 23:52:50 +0000
commitf4e6e7bec34a5fc6419930f2cf11ec63c5ff731a (patch)
tree8960154378e6aa081ac9061669e1734805f1c399 /portal-gui
parente3f7f7b6cfe355af89d5b8b9581497cc2cd96005 (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.py4
-rw-r--r--portal-gui/rpkigui/myrpki/views.py34
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