aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/gui/app/models.py4
-rw-r--r--rpkid/rpki/gui/app/templates/app/app_base.html4
-rw-r--r--rpkid/rpki/gui/app/templates/app/child_list.html8
-rw-r--r--rpkid/rpki/gui/app/templates/app/client_detail.html16
-rw-r--r--rpkid/rpki/gui/app/templates/app/client_list.html1
-rw-r--r--rpkid/rpki/gui/app/templates/app/dashboard.html5
-rw-r--r--rpkid/rpki/gui/app/templates/app/object_detail.html19
-rw-r--r--rpkid/rpki/gui/app/templates/app/object_list.html8
-rw-r--r--rpkid/rpki/gui/app/templates/app/parent_list.html6
-rw-r--r--rpkid/rpki/gui/app/templates/app/repository_detail.html16
-rw-r--r--rpkid/rpki/gui/app/templates/app/repository_list.html22
-rw-r--r--rpkid/rpki/gui/app/urls.py8
-rw-r--r--rpkid/rpki/gui/app/views.py124
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):