diff options
author | Michael Elkins <melkins@tislabs.com> | 2012-02-07 06:13:22 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2012-02-07 06:13:22 +0000 |
commit | 5c94397dc16e76d5b753741380fd19a895063cb8 (patch) | |
tree | 3f1bfa3b691a93fe01d77f548a9eefc0ae0ab664 | |
parent | 24381f9684cd4eb8f7faba5213b9dd4b79bec4ed (diff) |
add basic user management support
svn path=/branches/tk161/; revision=4304
-rw-r--r-- | rpkid/rpki/gui/app/forms.py | 5 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/models.py | 4 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/dashboard.html | 3 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/user_confirm_delete.html | 20 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/user_list.html | 27 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/urls.py | 4 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 42 |
7 files changed, 104 insertions, 1 deletions
diff --git a/rpkid/rpki/gui/app/forms.py b/rpkid/rpki/gui/app/forms.py index 2fcceda2..2c20ee0f 100644 --- a/rpkid/rpki/gui/app/forms.py +++ b/rpkid/rpki/gui/app/forms.py @@ -294,3 +294,8 @@ def ChildForm(instance): help_text='deselect to remove delegation') return _wrapped + + +class UserDeleteForm(forms.Form): + """Stub form for deleting users.""" + pass diff --git a/rpkid/rpki/gui/app/models.py b/rpkid/rpki/gui/app/models.py index 62e3a141..e551ee4b 100644 --- a/rpkid/rpki/gui/app/models.py +++ b/rpkid/rpki/gui/app/models.py @@ -99,6 +99,10 @@ class Conf(rpki.irdb.models.ResourceHolderCA): """ return Child.objects.filter(issuer=self) + @models.permalink + def get_absolute_url(self): + return ('rpki.gui.app.views.user_detail', [str(self.pk)]) + class Meta: proxy = True diff --git a/rpkid/rpki/gui/app/templates/app/dashboard.html b/rpkid/rpki/gui/app/templates/app/dashboard.html index 7d60ac74..172e981b 100644 --- a/rpkid/rpki/gui/app/templates/app/dashboard.html +++ b/rpkid/rpki/gui/app/templates/app/dashboard.html @@ -8,9 +8,10 @@ <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_staff %} +{% 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 %} diff --git a/rpkid/rpki/gui/app/templates/app/user_confirm_delete.html b/rpkid/rpki/gui/app/templates/app/user_confirm_delete.html new file mode 100644 index 00000000..76c66775 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/user_confirm_delete.html @@ -0,0 +1,20 @@ +{% extends "app/app_base.html" %} + +{% block content %} +<div class='page-title'> + <h1>Delete User</h1> +</div> + +<div class='alert-message block-message warning'> + <p><strong>Please confirm</strong> that you would like to delete the following user account. + <h2>{{ object.handle }}</h2> + <div class='alert-actions'> + <form method='POST' action='{{ request.get_full_path }}'> + {% csrf_token %} + {{ form }} + <input class='btn danger' value='Delete' type='submit'> + <a class='btn' href='{% url rpki.gui.app.views.user_list %}'>Cancel</a> + </form> + </div> +</div> +{% endblock content %} diff --git a/rpkid/rpki/gui/app/templates/app/user_list.html b/rpkid/rpki/gui/app/templates/app/user_list.html new file mode 100644 index 00000000..8c90d3ac --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/user_list.html @@ -0,0 +1,27 @@ +{% extends "app/app_base.html" %} + +{% block content %} +<div class='page-title'> + <h1>Users</h1> +</div> + +<table class='zebra-striped'> + <tr> + <th>Username</th> + <th>Email</th> + <th>Superuser</th> + <th>Action</th> + </tr> + {% for u in users %} + <tr> + <td>{{ u.0.handle }}</td> + <td>{{ u.1.email }}</td> + <td>{{ u.1.is_superuser }}</td> + <td> + <a class='btn small' href='{{ u.0.get_absolute_url }}/edit'>Edit</a> + <a class='btn small danger' href='{{ u.0.get_absolute_url }}/delete'>Delete</a> + </td> + </tr> + {% endfor %} +</table> +{% endblock content %} diff --git a/rpkid/rpki/gui/app/urls.py b/rpkid/rpki/gui/app/urls.py index cfe82777..c334f36f 100644 --- a/rpkid/rpki/gui/app/urls.py +++ b/rpkid/rpki/gui/app/urls.py @@ -60,4 +60,8 @@ urlpatterns = patterns('', (r'^routes/$', views.route_view), (r'^child_wizard$', views.child_wizard), (r'^update_bpki', views.update_bpki), + (r'^user/$', views.user_list), + (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 e317a629..083d5305 100644 --- a/rpkid/rpki/gui/app/views.py +++ b/rpkid/rpki/gui/app/views.py @@ -950,3 +950,45 @@ def client_export(request, pk): z = Zookeeper() xml = z.generate_repository_response(client) return serve_xml(str(xml), '%s.repo' % z.handle) + + +@superuser_required +def user_list(request): + """Display a list of all the RPKI handles managed by this server.""" + # create a list of tuples of (Conf, User) + users = [] + for conf in models.Conf.objects.all(): + try: + u = User.objects.get(username=conf.handle) + except User.DoesNotExist: + u = None + users.append((conf, u)) + return render(request, 'app/user_list.html', {'users': users}) + + +@superuser_required +def user_detail(request): + """Placeholder for Conf.get_absolute_url().""" + pass + + +@superuser_required +def user_delete(request, pk): + conf = models.Conf.objects.get(pk=pk) + if request.method == 'POST': + form = forms.UserDeleteForm(request.POST) + if form.is_valid(): + User.objects.filter(username=conf.handle).delete() + z = Zookeeper(handle=conf.handle) + z.delete_self() + z.synchronize() + return http.HttpResponseRedirect(reverse(user_list)) + else: + form = forms.UserDeleteForm() + return render(request, 'app/user_confirm_delete.html', + {'object': conf, 'form': form}) + + +@superuser_required +def user_edit(request, pk): + pass |