diff --git a/opentech/apply/users/urls.py b/opentech/apply/users/urls.py index dd1ea0b17faaa2bbcf0bbafe3bd09caaa813e835..76e5050bf609c612278e21afceb5e2db07b4d86a 100644 --- a/opentech/apply/users/urls.py +++ b/opentech/apply/users/urls.py @@ -22,6 +22,16 @@ urlpatterns = [ # Log out url(r'^logout/$', auth_views.LogoutView.as_view(next_page='/'), name='logout'), + # Password change + url( + r'^password/$', + auth_views.PasswordChangeView.as_view( + template_name="users/change_password.html", + success_url=reverse_lazy('users:account') + ), + name='password_change', + ), + # Password reset url(r'^reset/$', auth_views.PasswordResetView.as_view( template_name='users/password_reset/form.html', diff --git a/opentech/apply/users/views.py b/opentech/apply/users/views.py index 004fa0aa64e8e2ca9f5d80ae2dd6d72e7620f227..4ffcd7a58173a0735a541fc2ea92cd0ecae100a5 100644 --- a/opentech/apply/users/views.py +++ b/opentech/apply/users/views.py @@ -1,8 +1,12 @@ from django.contrib.auth.decorators import login_required -from django.template.response import TemplateResponse +from django.shortcuts import render +from wagtail.wagtailadmin.views.account import password_management_enabled @login_required(login_url='/user/login') def account(request): "Account page placeholder view" - return TemplateResponse(request, 'users/account.html', {}) + + return render(request, 'users/account.html', { + 'show_change_password': password_management_enabled() and request.user.has_usable_password(), + }) diff --git a/opentech/users/templates/users/account.html b/opentech/users/templates/users/account.html index 76ce008a2256604f79007d0cdfadcf3a2044954f..725d615316bb18d3700f3dc45ed61a22253c7ad1 100644 --- a/opentech/users/templates/users/account.html +++ b/opentech/users/templates/users/account.html @@ -1,7 +1,12 @@ {% extends 'base.html' %} +{% load i18n %} {% block title %}Account{% endblock %} {% block content %} <h2>Welcome {{ user }}</h2> + +{% if show_change_password %} + <a href="{% url 'users:password_change' %}">{% trans "Change password" %}</a> +{% endif %} {% endblock %} diff --git a/opentech/users/templates/users/change_password.html b/opentech/users/templates/users/change_password.html new file mode 100644 index 0000000000000000000000000000000000000000..efde07945c4e191b54424e3b0ee5a9e3da9826b1 --- /dev/null +++ b/opentech/users/templates/users/change_password.html @@ -0,0 +1,36 @@ +{% extends 'base.html' %} +{% load i18n %} + +{% block title %}{% trans "Change password" %}{% endblock %} + + +{% block content %} + {% if form.non_field_errors %} + <div class="messages"> + <ul> + {% for error in form.non_field_errors %} + <li class="error">{{ error }}</li> + {% endfor %} + </ul> + </div> + {% endif %} + + {% if form.errors %} + <div class="messages"> + {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} + + </div> + {% endif %} + + <form action="{% url 'users:password_change' %}" method="POST" novalidate> + {% csrf_token %} + + {% for field in form %} + {{ field.errors }} + {{ field.label_tag }} + {{ field }} + {% endfor %} + + <button type="submit">{% trans 'Reset password' %}</button> + </form> +{% endblock %}