diff options
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/app_base.html | 6 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/dashboard.html | 7 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/user_list.html | 4 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/urls.py | 2 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 90 |
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}) |