aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/gui/app/templates/app/app_base.html6
-rw-r--r--rpkid/rpki/gui/app/templates/app/dashboard.html7
-rw-r--r--rpkid/rpki/gui/app/templates/app/user_list.html4
-rw-r--r--rpkid/rpki/gui/app/urls.py2
-rw-r--r--rpkid/rpki/gui/app/views.py90
5 files changed, 55 insertions, 54 deletions
diff --git a/rpkid/rpki/gui/app/templates/app/app_base.html b/rpkid/rpki/gui/app/templates/app/app_base.html
index 61b73290..494b26ca 100644
--- a/rpkid/rpki/gui/app/templates/app/app_base.html
+++ b/rpkid/rpki/gui/app/templates/app/app_base.html
@@ -16,10 +16,14 @@
<li><a href="{% url rpki.gui.app.views.roa_list %}">roas</a></li>
<li><a href="{% url rpki.gui.app.views.ghostbuster_list %}">ghostbusters</a></li>
<li><a href="{% url rpki.gui.app.views.repository_list %}">repositories</a></li>
+</ul>
+
{% if request.user.is_superuser %}
+<ul class='unstyled'>
<li><a href="{% url rpki.gui.app.views.client_list %}">pubclients</a></li>
-{% endif %}
+ <li><a href="{% url rpki.gui.app.views.user_list %}" title="manage users">users</a></li>
</ul>
+{% endif %}
{% block sidebar_extra %}{% endblock %}
diff --git a/rpkid/rpki/gui/app/templates/app/dashboard.html b/rpkid/rpki/gui/app/templates/app/dashboard.html
index 172e981b..ac801e1d 100644
--- a/rpkid/rpki/gui/app/templates/app/dashboard.html
+++ b/rpkid/rpki/gui/app/templates/app/dashboard.html
@@ -8,13 +8,6 @@
<li><a href="{% url rpki.gui.app.views.conf_list %}" title="select a different resource handle to manage">select identity</a></li>
</ul>
-{% if user.is_superuser %}
-<ul class='unstyled'>
- <li><a href="{% url rpki.gui.app.views.child_wizard %}" title="create a new locally hosted resource handle">create child wizard</a></li>
- <li><a href="{% url rpki.gui.app.views.user_list %}" title="manage users">users</a></li>
-</ul>
-{% endif %}
-
<ul class='unstyled'>
<li><a href="{% url rpki.gui.app.views.refresh %}">refresh</a></li>
</ul>
diff --git a/rpkid/rpki/gui/app/templates/app/user_list.html b/rpkid/rpki/gui/app/templates/app/user_list.html
index 8c90d3ac..403d11ce 100644
--- a/rpkid/rpki/gui/app/templates/app/user_list.html
+++ b/rpkid/rpki/gui/app/templates/app/user_list.html
@@ -24,4 +24,8 @@
</tr>
{% endfor %}
</table>
+
+<div class='actions'>
+ <a class='btn' href="{% url rpki.gui.app.views.user_create %}" title="create a new locally hosted resource handle">Create</a>
+</div>
{% endblock content %}
diff --git a/rpkid/rpki/gui/app/urls.py b/rpkid/rpki/gui/app/urls.py
index c334f36f..59f1ab2c 100644
--- a/rpkid/rpki/gui/app/urls.py
+++ b/rpkid/rpki/gui/app/urls.py
@@ -58,9 +58,9 @@ urlpatterns = patterns('',
(r'^roa/(?P<pk>\d+)$', views.roa_detail),
(r'^roa/(?P<pk>\d+)/delete$', views.roa_delete),
(r'^routes/$', views.route_view),
- (r'^child_wizard$', views.child_wizard),
(r'^update_bpki', views.update_bpki),
(r'^user/$', views.user_list),
+ (r'^user/create$', views.user_create),
(r'^user/(?P<pk>\d+)$', views.user_detail),
(r'^user/(?P<pk>\d+)/delete$', views.user_delete),
(r'^user/(?P<pk>\d+)/edit$', views.user_edit),
diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py
index 083d5305..b6f02a4b 100644
--- a/rpkid/rpki/gui/app/views.py
+++ b/rpkid/rpki/gui/app/views.py
@@ -675,51 +675,6 @@ def refresh(request):
@handle_required
-def child_wizard(request):
- """
- Wizard mode to create a new locally hosted child.
-
- """
- if not request.user.is_superuser:
- return http.HttpResponseForbidden()
-
- if request.method == 'POST':
- form = forms.ChildWizardForm(request.POST, request.FILES)
- if form.is_valid():
- handle = form.cleaned_data.get('handle')
- pw = form.cleaned_data.get('password')
- email = form.cleaned_data.get('email')
-
- User.objects.create_user(handle, email, pw)
-
- # FIXME etree_wrapper should allow us to deal with file objects
- t = NamedTemporaryFile(delete=False)
- t.close()
-
- zk_child = Zookeeper(handle=handle)
- identity_xml = zk_child.initialize()
- identity_xml.save(t.name)
- parent = form.cleaned_data.get('parent')
- zk_parent = Zookeeper(handle=parent.handle)
- parent_response, _ = zk_parent.configure_child(t.name)
- parent_response.save(t.name)
- repo_req, _ = zk_child.configure_parent(t.name)
- repo_req.save(t.name)
- repo_resp, _ = zk_parent.configure_publication_client(t.name)
- repo_resp.save(t.name)
- zk_child.configure_repository(t.name)
- os.remove(t.name)
- # force rpkid run for both parent and child
- zk_child.synchronize(parent.handle, handle)
-
- return http.HttpResponseRedirect(reverse(dashboard))
- else:
- form = forms.ChildWizardForm()
-
- return render(request, 'app/child_wizard_form.html', {'form': form})
-
-
-@handle_required
def child_response(request, pk):
"""
Export the XML file containing the output of the configure_child
@@ -992,3 +947,48 @@ def user_delete(request, pk):
@superuser_required
def user_edit(request, pk):
pass
+
+
+@handle_required
+def user_create(request):
+ """
+ Wizard mode to create a new locally hosted child.
+
+ """
+ if not request.user.is_superuser:
+ return http.HttpResponseForbidden()
+
+ if request.method == 'POST':
+ form = forms.ChildWizardForm(request.POST, request.FILES)
+ if form.is_valid():
+ handle = form.cleaned_data.get('handle')
+ pw = form.cleaned_data.get('password')
+ email = form.cleaned_data.get('email')
+
+ User.objects.create_user(handle, email, pw)
+
+ # FIXME etree_wrapper should allow us to deal with file objects
+ t = NamedTemporaryFile(delete=False)
+ t.close()
+
+ zk_child = Zookeeper(handle=handle)
+ identity_xml = zk_child.initialize()
+ identity_xml.save(t.name)
+ parent = form.cleaned_data.get('parent')
+ zk_parent = Zookeeper(handle=parent.handle)
+ parent_response, _ = zk_parent.configure_child(t.name)
+ parent_response.save(t.name)
+ repo_req, _ = zk_child.configure_parent(t.name)
+ repo_req.save(t.name)
+ repo_resp, _ = zk_parent.configure_publication_client(t.name)
+ repo_resp.save(t.name)
+ zk_child.configure_repository(t.name)
+ os.remove(t.name)
+ # force rpkid run for both parent and child
+ zk_child.synchronize(parent.handle, handle)
+
+ return http.HttpResponseRedirect(reverse(dashboard))
+ else:
+ form = forms.ChildWizardForm()
+
+ return render(request, 'app/child_wizard_form.html', {'form': form})