aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/gui/app/forms.py16
-rw-r--r--rpkid/rpki/gui/app/templates/app/bootstrap_form.html2
-rw-r--r--rpkid/rpki/gui/app/templates/app/user_edit_form.html16
-rw-r--r--rpkid/rpki/gui/app/templates/app/user_list.html2
-rw-r--r--rpkid/rpki/gui/app/views.py22
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