diff options
-rw-r--r-- | rpkid/rpki/gui/app/forms.py | 16 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/bootstrap_form.html | 2 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/user_edit_form.html | 16 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/user_list.html | 2 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 22 |
5 files changed, 54 insertions, 4 deletions
diff --git a/rpkid/rpki/gui/app/forms.py b/rpkid/rpki/gui/app/forms.py index a2940989..f1f5b875 100644 --- a/rpkid/rpki/gui/app/forms.py +++ b/rpkid/rpki/gui/app/forms.py @@ -143,6 +143,22 @@ class UserCreateForm(forms.Form): return self.cleaned_data +class UserEditForm(forms.Form): + """Form for editing a user.""" + email = forms.CharField() + pw = forms.CharField(widget=forms.PasswordInput, label='Password', + required=False) + pw2 = forms.CharField(widget=forms.PasswordInput, label='Confirm password', + required=False) + + def clean(self): + p1 = self.cleaned_data.get('pw') + p2 = self.cleaned_data.get('pw2') + if p1 != p2: + raise forms.ValidationError('Passwords do not match') + return self.cleaned_data + + class ROARequest(forms.Form): """Form for entering a ROA request. diff --git a/rpkid/rpki/gui/app/templates/app/bootstrap_form.html b/rpkid/rpki/gui/app/templates/app/bootstrap_form.html index d3df1081..bf8b3553 100644 --- a/rpkid/rpki/gui/app/templates/app/bootstrap_form.html +++ b/rpkid/rpki/gui/app/templates/app/bootstrap_form.html @@ -2,7 +2,7 @@ {% if form.non_field_errors %} <div class='alert-message error'> -{{ form.non_field_errors }} + <p>{{ form.non_field_errors }} </div> {% endif %} diff --git a/rpkid/rpki/gui/app/templates/app/user_edit_form.html b/rpkid/rpki/gui/app/templates/app/user_edit_form.html new file mode 100644 index 00000000..59fc01c2 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/user_edit_form.html @@ -0,0 +1,16 @@ +{% extends "app/app_base.html" %} + +{% block content %} +<div class='page-title'> + <h1>Edit User: {{ object.username }}</h1> +</div> + +<form method='POST' action='{{ request.get_full_path }}'> + {% csrf_token %} + {% include "app/bootstrap_form.html" %} + <div class='actions'> + <input class='btn primary' type='submit' value='Save'> + <a class='btn' href='{% url rpki.gui.app.views.user_list %}'>Cancel</a> + </div> +</form> +{% endblock content %} diff --git a/rpkid/rpki/gui/app/templates/app/user_list.html b/rpkid/rpki/gui/app/templates/app/user_list.html index 403d11ce..804e94f0 100644 --- a/rpkid/rpki/gui/app/templates/app/user_list.html +++ b/rpkid/rpki/gui/app/templates/app/user_list.html @@ -9,14 +9,12 @@ <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> diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py index 9813d8cc..f57dd518 100644 --- a/rpkid/rpki/gui/app/views.py +++ b/rpkid/rpki/gui/app/views.py @@ -918,7 +918,27 @@ def user_delete(request, pk): @superuser_required def user_edit(request, pk): - pass + conf = get_object_or_404(models.Conf, pk=pk) + # in the old model, there may be users with a different name, so create a + # new user object if it is missing. + try: + user = User.objects.get(username=conf.handle) + except User.DoesNotExist: + user = User(username=conf.handle) + + if request.method == 'POST': + form = forms.UserEditForm(request.POST) + if form.is_valid(): + pw = form.cleaned_data.get('pw') + if pw: + user.set_password(pw) + user.email = form.cleaned_data.get('email') + user.save() + return http.HttpResponseRedirect(reverse(user_list)) + else: + form = forms.UserEditForm(initial={'email': user.email}) + return render(request, 'app/user_edit_form.html', + {'object': user, 'form': form}) @handle_required |