diff options
author | Michael Elkins <melkins@tislabs.com> | 2012-01-20 00:25:04 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2012-01-20 00:25:04 +0000 |
commit | bfc5da339cafc64fdcfedb41f945f152a31ff5e4 (patch) | |
tree | 3f9b1aedd34f9df03fa21d417043c4659b784761 /rpkid/rpki/gui | |
parent | 6ee1eab3d04f105111a0edfc963eec4de1d2dfe7 (diff) |
add generic object_detail base template for boilerplate detail views with an import/create button
add detail views for repository and pubclients
rename import_* to *_import to match names for other methods on the same model
svn path=/branches/tk161/; revision=4238
Diffstat (limited to 'rpkid/rpki/gui')
-rw-r--r-- | rpkid/rpki/gui/app/models.py | 4 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/app_base.html | 4 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/child_list.html | 8 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/client_detail.html | 16 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/client_list.html | 1 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/dashboard.html | 5 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/object_detail.html | 19 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/object_list.html | 8 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/parent_list.html | 6 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/repository_detail.html | 16 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/repository_list.html | 22 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/urls.py | 8 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 124 |
13 files changed, 146 insertions, 95 deletions
diff --git a/rpkid/rpki/gui/app/models.py b/rpkid/rpki/gui/app/models.py index 792a2c86..aae2215f 100644 --- a/rpkid/rpki/gui/app/models.py +++ b/rpkid/rpki/gui/app/models.py @@ -178,7 +178,7 @@ class Repository(rpki.irdb.models.Repository): @models.permalink def get_absolute_url(self): - return ('rpki.gui.app.views.repository_detail', [str(pk)]) + return ('rpki.gui.app.views.repository_detail', [str(self.pk)]) def __unicode__(self): return "%s's repository %s" % (self.issuer.handle, self.handle) @@ -191,7 +191,7 @@ class Client(rpki.irdb.models.Client): @models.permalink def get_absolute_url(self): - return ('rpki.gui.app.views.client_detail', [str(pk)]) + return ('rpki.gui.app.views.client_detail', [str(self.pk)]) def __unicode__(self): return self.handle diff --git a/rpkid/rpki/gui/app/templates/app/app_base.html b/rpkid/rpki/gui/app/templates/app/app_base.html index be5abc19..4a436f6c 100644 --- a/rpkid/rpki/gui/app/templates/app/app_base.html +++ b/rpkid/rpki/gui/app/templates/app/app_base.html @@ -15,6 +15,10 @@ <li><a href="{% url rpki.gui.app.views.child_list %}">children</a></li> <li><a href="{% url rpki.gui.app.views.roa_list %}">roas</a></li> <li><a href="{% url rpki.gui.app.views.ghostbusters_list %}">ghostbusters</a></li> + <li><a href="{% url rpki.gui.app.views.repository_list %}">repositories</a></li> +{% if request.user.is_superuser %} + <li><a href="{% url rpki.gui.app.views.client_list %}">pubclients</a></li> +{% endif %} </ul> {% block sidebar_extra %}{% endblock %} diff --git a/rpkid/rpki/gui/app/templates/app/child_list.html b/rpkid/rpki/gui/app/templates/app/child_list.html index f650e70e..9ba31ffd 100644 --- a/rpkid/rpki/gui/app/templates/app/child_list.html +++ b/rpkid/rpki/gui/app/templates/app/child_list.html @@ -1,9 +1,7 @@ {% extends "app/object_list.html" %} -{% block actions %} -<div class='actions'> - <a class='btn' href="{% url rpki.gui.app.views.import_child %}" title="import a new child's identity.xml file">Import</a> -</div> -{% endblock actions %} +{% block object_detail %} +<li><a href="{{ object.get_absolute_url }}">{{ object.handle }}</a></li> +{% endblock object_detail %} <!-- vim: set sw=2: --> diff --git a/rpkid/rpki/gui/app/templates/app/client_detail.html b/rpkid/rpki/gui/app/templates/app/client_detail.html new file mode 100644 index 00000000..2044abb6 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/client_detail.html @@ -0,0 +1,16 @@ +{% extends "app/object_detail.html" %} + +{% block object_detail %} +<table style='condensed-table'> + <tr> + <th>Name</th> + <td>{{ object.handle }}</td> + </tr> + <tr> + <th>SIA</th> + <td>{{ object.sia_base }}</td> + </tr> +</table> +{% endblock object_detail %} + +<!-- vim:set sw=2: --> diff --git a/rpkid/rpki/gui/app/templates/app/client_list.html b/rpkid/rpki/gui/app/templates/app/client_list.html new file mode 100644 index 00000000..a2a0a5a2 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/client_list.html @@ -0,0 +1 @@ +{% extends "app/object_list.html" %} diff --git a/rpkid/rpki/gui/app/templates/app/dashboard.html b/rpkid/rpki/gui/app/templates/app/dashboard.html index 7cfb2f68..7d60ac74 100644 --- a/rpkid/rpki/gui/app/templates/app/dashboard.html +++ b/rpkid/rpki/gui/app/templates/app/dashboard.html @@ -15,11 +15,6 @@ {% endif %} <ul class='unstyled'> - <li><a href="{% url rpki.gui.app.views.import_repository %}" title="upload XML response from remote repository">import repository</a></li> - <li><a href="{% url rpki.gui.app.views.import_pubclient %}" title="import XML request from a publication client">import pubclient</a></li> -</ul> - -<ul class='unstyled'> <li><a href="{% url rpki.gui.app.views.refresh %}">refresh</a></li> </ul> {% endblock sidebar_extra %} diff --git a/rpkid/rpki/gui/app/templates/app/object_detail.html b/rpkid/rpki/gui/app/templates/app/object_detail.html new file mode 100644 index 00000000..bae94b07 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/object_detail.html @@ -0,0 +1,19 @@ +{% extends "app/app_base.html" %} + +{% block content %} + +<div class='page-header'> + <h1>{{ page_title }} +</div> + +{% block object_detail %} +{{ object }} +{% endblock %} + +<div class='actions'> + <a class='btn danger' href='{{ object.get_absolute_url }}/delete'>Delete</a> +</div> + +{% endblock %} + +<!-- vim: set sw=2: --> diff --git a/rpkid/rpki/gui/app/templates/app/object_list.html b/rpkid/rpki/gui/app/templates/app/object_list.html index 9ec01e14..abcac6d1 100644 --- a/rpkid/rpki/gui/app/templates/app/object_list.html +++ b/rpkid/rpki/gui/app/templates/app/object_list.html @@ -20,7 +20,13 @@ None {% endif %} -{% block actions %}{% endblock %} +{% block actions %} +{% if create_url %} +<div class='actions'> + <a class='btn' href='{{ create_url }}'>{{ create_label|default:"Create" }}</a> +</div> +{% endif %} +{% endblock %} {% endblock %} diff --git a/rpkid/rpki/gui/app/templates/app/parent_list.html b/rpkid/rpki/gui/app/templates/app/parent_list.html index 1a79b4c6..9ba31ffd 100644 --- a/rpkid/rpki/gui/app/templates/app/parent_list.html +++ b/rpkid/rpki/gui/app/templates/app/parent_list.html @@ -4,10 +4,4 @@ <li><a href="{{ object.get_absolute_url }}">{{ object.handle }}</a></li> {% endblock object_detail %} -{% block actions %} -<div class='actions'> - <a class='btn' href="{% url rpki.gui.app.views.import_parent %}" title="upload XML response from remote parent">Import</a> -</div> -{% endblock actions %} - <!-- vim: set sw=2: --> diff --git a/rpkid/rpki/gui/app/templates/app/repository_detail.html b/rpkid/rpki/gui/app/templates/app/repository_detail.html new file mode 100644 index 00000000..2044abb6 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/repository_detail.html @@ -0,0 +1,16 @@ +{% extends "app/object_detail.html" %} + +{% block object_detail %} +<table style='condensed-table'> + <tr> + <th>Name</th> + <td>{{ object.handle }}</td> + </tr> + <tr> + <th>SIA</th> + <td>{{ object.sia_base }}</td> + </tr> +</table> +{% endblock object_detail %} + +<!-- vim:set sw=2: --> diff --git a/rpkid/rpki/gui/app/templates/app/repository_list.html b/rpkid/rpki/gui/app/templates/app/repository_list.html index 5dfc1eef..2ccd0223 100644 --- a/rpkid/rpki/gui/app/templates/app/repository_list.html +++ b/rpkid/rpki/gui/app/templates/app/repository_list.html @@ -1,19 +1,7 @@ -{% extends "app/app_base.html" %} +{% extends "app/object_list.html" %} + +{% block object_detail %} +<li><a href="{{ object.get_absolute_url }}">{{ object.handle }}</a></li> +{% endblock %} -{% block content %} -<table style='zebra-striped'> - <tr> - <th>Name</th> - <th>SIA</th> - <th>Action</th> - </tr> - {% for obj in object_list %} - <tr> - <td>{{ obj.handle }}</td> - <td>{{ obj.sia_base }}</td> - <td><a class='btn danger' href='{{ obj.get_absolute_url }}/delete'>Delete</a></td> - </tr> - {% endfor %} -</table> -{% endblock content %} <!-- vim:set sw=2: --> diff --git a/rpkid/rpki/gui/app/urls.py b/rpkid/rpki/gui/app/urls.py index 0bdd3786..68277301 100644 --- a/rpkid/rpki/gui/app/urls.py +++ b/rpkid/rpki/gui/app/urls.py @@ -25,9 +25,11 @@ urlpatterns = patterns('', (r'^conf/list$', views.conf_list), (r'^conf/select$', views.conf_select), (r'^parent/$', views.parent_list), + (r'^parent/import$', views.parent_import), (r'^parent/(?P<pk>\d+)$', views.parent_view), (r'^parent/(?P<pk>\d+)/delete$', views.parent_delete), (r'^child/$', views.child_list), + (r'^child/import$', views.child_import), (r'^child/(?P<pk>\d+)$', views.child_view), (r'^child/(?P<pk>\d+)/add_asn/$', views.child_add_asn), (r'^child/(?P<pk>\d+)/add_address/$', views.child_add_address), @@ -43,19 +45,17 @@ urlpatterns = patterns('', (r'^gbr/(?P<pk>\d+)/delete$', views.ghostbuster_delete), (r'^refresh$', views.refresh), (r'^client/$', views.client_list), + (r'^client/import$', views.client_import), (r'^client/(?P<pk>\d+)$', views.client_detail), (r'^client/(?P<pk>\d+)/delete$', views.client_delete), - (r'^client/(?P<pk>\d+)/import$', views.client_import), (r'^repo/$', views.repository_list), + (r'^repo/import$', views.repository_import), (r'^repo/(?P<pk>\d+)$', views.repository_detail), (r'^repo/(?P<pk>\d+)/delete$', views.repository_delete), - (r'^repo/(?P<pk>\d+)/import$', views.repository_import), (r'^roa/$', views.roa_list), (r'^roa/(?P<pk>\d+)/$', views.roa_detail), (r'^roa/(?P<pk>\d+)/delete$', views.roa_delete), (r'^routes/$', views.route_view), - (r'^import_child$', views.import_child), - (r'^import_parent$', views.import_parent), (r'^child_wizard$', views.child_wizard), (r'^update_bpki', views.update_bpki), ) diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py index fe1cd574..a5978f37 100644 --- a/rpkid/rpki/gui/app/views.py +++ b/rpkid/rpki/gui/app/views.py @@ -186,11 +186,63 @@ def conf_export(request): return serve_xml(glue.read_identity(handle.handle), 'identity') @handle_required +def parent_import(request): + conf = request.session['handle'] + log = request.META['wsgi.errors'] + + if request.method == 'POST': + form = forms.ImportParentForm(conf, request.POST, request.FILES) + if form.is_valid(): + tmpf = tempfile.NamedTemporaryFile(prefix='parent', suffix='.xml', delete=False) + f = tmpf.name + tmpf.write(form.cleaned_data['xml'].read()) + tmpf.close() + + glue.import_parent(log, conf, form.cleaned_data['handle'], f) + + os.remove(tmpf.name) + + return http.HttpResponseRedirect(reverse(dashboard)) + else: + form = forms.ImportParentForm(conf) + + return render('app/import_parent_form.html', { 'form': form }, request) + +@handle_required def parent_list(request): """List view for parent objects.""" conf = request.session['handle'] return object_list(request, queryset=conf.parents.all(), template_name='app/parent_list.html', - extra_context = { 'page_title': 'Parents' }) + extra_context = { + 'page_title': 'Parents', + 'create_url': reverse(parent_import), + 'create_label': 'Import' }) + +@handle_required +def child_import(request): + """ + Import a repository response. + """ + conf = request.session['handle'] + log = request.META['wsgi.errors'] + + if request.method == 'POST': + form = forms.ImportChildForm(conf, request.POST, request.FILES) + if form.is_valid(): + tmpf = tempfile.NamedTemporaryFile(prefix='identity', suffix='.xml', delete=False) + f = tmpf.name + tmpf.write(form.cleaned_data['xml'].read()) + tmpf.close() + + glue.import_child(log, conf, form.cleaned_data['handle'], f) + + os.remove(tmpf.name) + + return http.HttpResponseRedirect(reverse(dashboard)) + else: + form = forms.ImportChildForm(conf) + + return render('app/import_child_form.html', { 'form': form }, request) @handle_required def child_list(request): @@ -198,7 +250,10 @@ def child_list(request): conf = request.session['handle'] return object_list(request, queryset=conf.children.all(), template_name = 'app/child_list.html', - extra_context = { 'page_title': 'Children' }) + extra_context = { + 'page_title': 'Children', + 'create_url': reverse(child_import), + 'create_label': 'Import' }) @handle_required def child_add_resource(request, pk, form_class, unused_list, callback, template_name='app/child_add_resource_form.html'): @@ -448,55 +503,6 @@ def refresh(request): glue.list_received_resources(request.META['wsgi.errors'], request.session['handle']) return http.HttpResponseRedirect(reverse(dashboard)) -@handle_required -def import_parent(request): - conf = request.session['handle'] - log = request.META['wsgi.errors'] - - if request.method == 'POST': - form = forms.ImportParentForm(conf, request.POST, request.FILES) - if form.is_valid(): - tmpf = tempfile.NamedTemporaryFile(prefix='parent', suffix='.xml', delete=False) - f = tmpf.name - tmpf.write(form.cleaned_data['xml'].read()) - tmpf.close() - - glue.import_parent(log, conf, form.cleaned_data['handle'], f) - - os.remove(tmpf.name) - - return http.HttpResponseRedirect(reverse(dashboard)) - else: - form = forms.ImportParentForm(conf) - - return render('app/import_parent_form.html', { 'form': form }, request) - -@handle_required -def import_child(request): - """ - Import a repository response. - """ - conf = request.session['handle'] - log = request.META['wsgi.errors'] - - if request.method == 'POST': - form = forms.ImportChildForm(conf, request.POST, request.FILES) - if form.is_valid(): - tmpf = tempfile.NamedTemporaryFile(prefix='identity', suffix='.xml', delete=False) - f = tmpf.name - tmpf.write(form.cleaned_data['xml'].read()) - tmpf.close() - - glue.import_child(log, conf, form.cleaned_data['handle'], f) - - os.remove(tmpf.name) - - return http.HttpResponseRedirect(reverse(dashboard)) - else: - form = forms.ImportChildForm(conf) - - return render('app/import_child_form.html', { 'form': form }, request) - @login_required def initialize(request): """ @@ -706,13 +712,17 @@ def repository_list(request): conf = request.session['handle'] qs = models.Repository.objects.filter(issuer=conf) return object_list(request, queryset=qs, template_name='app/repository_list.html', - extra_context={ 'page_title': 'Repositories' }) + extra_context={ + 'page_title': u'Repositories', + 'create_url': reverse(repository_import), + 'create_label': u'Import' }) @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 object_detail(request, queryset=qs, object_id=pk, template_name='app/repository_detail.html', + extra_context={ 'page_title': 'Repository Detail' }) @handle_required def repository_delete(request, pk): @@ -746,11 +756,15 @@ def repository_import(request): @superuser_required def client_list(request): return object_list(request, queryset=models.Client.objects.all(), template_name='app/client_list.html', - extra_context={ 'page_title': 'Publication Clients' }) + extra_context={ + 'page_title': u'Publication Clients', + 'create_url' : reverse(client_import), + 'create_label' : u'Import' }) @superuser_required def client_detail(request, pk): - return object_detail(request, queryset=models.Client.objects, object_id=pk, template_name='app/client_detail.html') + return object_detail(request, queryset=models.Client.objects, object_id=pk, template_name='app/client_detail.html', + extra_context={ 'page_title': 'Publication Client Detail' }) @superuser_required def client_delete(request, pk): |