From b996c03f618303845755fa6ce813493da5e633df Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 14 May 2019 13:58:23 +1000 Subject: [PATCH] Add a 'set password' form --- InvenTree/InvenTree/forms.py | 28 +++++++++++++- InvenTree/InvenTree/urls.py | 3 +- InvenTree/InvenTree/views.py | 43 ++++++++++++++++++++- InvenTree/templates/InvenTree/password.html | 7 ++++ InvenTree/templates/InvenTree/settings.html | 9 +++++ 5 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 InvenTree/templates/InvenTree/password.html diff --git a/InvenTree/InvenTree/forms.py b/InvenTree/InvenTree/forms.py index 901ef0b26a..f528c5c110 100644 --- a/InvenTree/InvenTree/forms.py +++ b/InvenTree/InvenTree/forms.py @@ -45,4 +45,30 @@ class EditUserForm(HelperForm): 'first_name', 'last_name', 'email' - ] \ No newline at end of file + ] + + +class SetPasswordForm(HelperForm): + """ Form for setting user password + """ + + enter_password = forms.CharField(max_length=100, + min_length=8, + required=True, + initial='', + widget=forms.PasswordInput(attrs={'autocomplete': 'off'}), + help_text='Enter new password') + + confirm_password = forms.CharField(max_length=100, + min_length=8, + required=True, + initial='', + widget=forms.PasswordInput(attrs={'autocomplete': 'off'}), + help_text='Confirm new password') + + class Meta: + model = User + fields = [ + 'enter_password', + 'confirm_password' + ] diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index 0e24fddd47..2872096c08 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -30,7 +30,7 @@ from django.conf.urls.static import static from django.views.generic.base import RedirectView from rest_framework.documentation import include_docs_urls -from .views import IndexView, SearchView, SettingsView, EditUserView +from .views import IndexView, SearchView, SettingsView, EditUserView, SetPasswordView from users.urls import user_urls @@ -65,6 +65,7 @@ urlpatterns = [ url(r'^settings/', SettingsView.as_view(), name='settings'), url(r'^edit-user/', EditUserView.as_view(), name='edit-user'), + url(r'^set-password/', SetPasswordView.as_view(), name='set-password'), url(r'^admin/', admin.site.urls, name='inventree-admin'), diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index 5b889246f6..041603f7fb 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -17,7 +17,7 @@ from django.views.generic.base import TemplateView from part.models import Part -from .forms import DeleteForm, EditUserForm +from .forms import DeleteForm, EditUserForm, SetPasswordForm from .helpers import str2bool from rest_framework import views @@ -382,6 +382,47 @@ class EditUserView(AjaxUpdateView): return self.request.user +class SetPasswordView(AjaxUpdateView): + """ View for setting user password """ + + ajax_template_name = "InvenTree/password.html" + ajax_form_title = "Set Password" + form_class = SetPasswordForm + + def get_object(self): + return self.request.user + + def post(self, request, *args, **kwargs): + + form = self.get_form() + + valid = form.is_valid() + + p1 = request.POST.get('enter_password', '') + p2 = request.POST.get('confirm_password', '') + + if valid: + # Passwords must match + + if not p1 == p2: + error = 'Password fields must match' + form.errors['enter_password'] = [error] + form.errors['confirm_password'] = [error] + + valid = False + + data = { + 'form_valid': valid + } + + if valid: + user = self.request.user + + user.set_password(p1) + user.save() + + return self.renderJsonResponse(request, form, data=data) + class IndexView(TemplateView): """ View for InvenTree index page """ diff --git a/InvenTree/templates/InvenTree/password.html b/InvenTree/templates/InvenTree/password.html new file mode 100644 index 0000000000..d109a09a7a --- /dev/null +++ b/InvenTree/templates/InvenTree/password.html @@ -0,0 +1,7 @@ +{% extends "modal_form.html" %} + +{% block pre_form_content %} + +{{ block.super }} + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings.html b/InvenTree/templates/InvenTree/settings.html index 56a8b1f0c2..2a2bbcc144 100644 --- a/InvenTree/templates/InvenTree/settings.html +++ b/InvenTree/templates/InvenTree/settings.html @@ -54,4 +54,13 @@ InvenTree | Settings ); }); + $("#edit-password").on('click', function() { + launchModalForm( + "{% url 'set-password' %}", + { + reload: true, + } + ); + }); + {% endblock %} \ No newline at end of file