From fd6449dff1592740b9960116d15fe2c1b015da8b Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Mon, 26 Jan 2015 12:39:42 +0100 Subject: [PATCH] implement database user password change - implement userdbs.forms.ChangeDatabaseUserPasswordForm - implement userdbs.views.ChangeDatabaseUserPassword - add URL pattern 'change_dbuser_password' to userdbs.urls - add template userdbs/databaseuser_setpassword.html - link from hostingpackage detail template to 'change_dbuser_password' - add changelog entry --- docs/changelog.rst | 1 + .../customerhostingpackage_detail.html | 2 +- .../userdbs/databaseuser_setpassword.html | 31 +++++++++++++++ gnuviechadmin/userdbs/forms.py | 26 +++++++++++++ gnuviechadmin/userdbs/urls.py | 3 ++ gnuviechadmin/userdbs/views.py | 38 +++++++++++++++++++ 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 gnuviechadmin/templates/userdbs/databaseuser_setpassword.html diff --git a/docs/changelog.rst b/docs/changelog.rst index 6609753..41cc64b 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,7 @@ Changelog ========= +* :feature:`-` implement password changes for database users * :feature:`-` implement setup of user databases * :support:`-` performance improvement for hosting package detail view * :support:`-` move HostingPackageAndCustomerMixin from managemails.views to diff --git a/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html b/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html index 53bd74f..fe65c6f 100644 --- a/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html +++ b/gnuviechadmin/templates/hostingpackages/customerhostingpackage_detail.html @@ -177,7 +177,7 @@ {% include "userdbs/snippets/db_type.html" with db_type=database.db_user.db_type %} {{ database.db_name }} {{ database.db_user.name }} - + {% trans "Set database user password" %} {% endfor %} diff --git a/gnuviechadmin/templates/userdbs/databaseuser_setpassword.html b/gnuviechadmin/templates/userdbs/databaseuser_setpassword.html new file mode 100644 index 0000000..37d58dc --- /dev/null +++ b/gnuviechadmin/templates/userdbs/databaseuser_setpassword.html @@ -0,0 +1,31 @@ +{% extends "userdbs/base.html" %} +{% load i18n crispy_forms_tags %} + +{% block title %}{{ block.super }} - {% spaceless %} +{% if customer == user %} +{% blocktrans with dbuser=dbuser.name %}Set Database User Password for {{ dbuser }}{% endblocktrans %} +{% else %} +{% blocktrans with dbuser=dbuser.name full_name=customer.get_full_name %}Set Database User Password for {{ dbuser }} of Customer {{ full_name }}{% endblocktrans %} +{% endif %} +{% endspaceless %}{% endblock title %} + +{% block page_title %}{% spaceless %} +{% if customer == user %} +{% blocktrans with dbuser=dbuser.name %}Set Database User Password for {{ dbuser }}{% endblocktrans %} +{% else %} +{% blocktrans with dbuser=dbuser.name full_name=customer.get_full_name %}Set Database User Password for {{ dbuser }} of Customer {{ full_name }}{% endblocktrans %} +{% endif %} +{% endspaceless %}{% endblock page_title %} + +{% block content %} +

{% if customer == user %}{% trans "Please specify the new password for your database user." %}{% else %}{% trans "Please specify the new password of the database user." %}{% endif %} +{% crispy form %} +{% endblock content %} + +{% block extra_js %} + +{% endblock extra_js %} diff --git a/gnuviechadmin/userdbs/forms.py b/gnuviechadmin/userdbs/forms.py index 45ebe74..2c24743 100644 --- a/gnuviechadmin/userdbs/forms.py +++ b/gnuviechadmin/userdbs/forms.py @@ -15,6 +15,7 @@ from crispy_forms.layout import ( from .models import ( DB_TYPES, + DatabaseUser, UserDatabase, ) from gvawebcore.forms import PasswordModelFormMixin @@ -64,3 +65,28 @@ class AddUserDatabaseForm(forms.ModelForm, PasswordModelFormMixin): data['db_type'], self.hosting_package.osuser, password=data['password1'], commit=commit) return super(AddUserDatabaseForm, self).save(commit) + + +class ChangeDatabaseUserPasswordForm(forms.ModelForm, PasswordModelFormMixin): + """ + This form is used to change the password of a database user. + + """ + class Meta: + model = DatabaseUser + fields = [] + + def __init__(self, *args, **kwargs): + self.hosting_package = kwargs.pop('hostingpackage') + super(ChangeDatabaseUserPasswordForm, self).__init__(*args, **kwargs) + self.helper = FormHelper() + self.helper.form_action = reverse( + 'change_dbuser_password', kwargs={ + 'slug': self.instance.name, + 'package': self.hosting_package.id, + }) + self.helper.add_input(Submit('submit', _('Set password'))) + + def save(self, commit=True): + self.instance.set_password(self.cleaned_data['password1']) + return super(ChangeDatabaseUserPasswordForm, self).save() diff --git a/gnuviechadmin/userdbs/urls.py b/gnuviechadmin/userdbs/urls.py index 902e536..7f21f35 100644 --- a/gnuviechadmin/userdbs/urls.py +++ b/gnuviechadmin/userdbs/urls.py @@ -8,10 +8,13 @@ from django.conf.urls import patterns, url from .views import ( AddUserDatabase, + ChangeDatabaseUserPassword, ) urlpatterns = patterns( '', url(r'^(?P\d+)/create$', AddUserDatabase.as_view(), name='add_userdatabase'), + url(r'^(?P\d+)/(?P[\w0-9]+)/setpassword', + ChangeDatabaseUserPassword.as_view(), name='change_dbuser_password'), ) diff --git a/gnuviechadmin/userdbs/views.py b/gnuviechadmin/userdbs/views.py index 6ed18fb..c11caf6 100644 --- a/gnuviechadmin/userdbs/views.py +++ b/gnuviechadmin/userdbs/views.py @@ -8,6 +8,7 @@ from django.shortcuts import redirect from django.utils.translation import ugettext as _ from django.views.generic.edit import ( CreateView, + UpdateView, ) from django.contrib import messages @@ -16,9 +17,11 @@ from gvawebcore.views import HostingPackageAndCustomerMixin from .forms import ( AddUserDatabaseForm, + ChangeDatabaseUserPasswordForm, ) from .models import ( DB_TYPES, + DatabaseUser, UserDatabase, ) @@ -62,3 +65,38 @@ class AddUserDatabase( dbname=userdatabase.db_name, db_user=userdatabase.db_user) ) return redirect(self.get_hosting_package()) + + +class ChangeDatabaseUserPassword( + HostingPackageAndCustomerMixin, StaffOrSelfLoginRequiredMixin, UpdateView +): + """ + This view is used to change a database user's password. + + """ + model = DatabaseUser + slug_field = 'name' + context_object_name = 'dbuser' + template_name_suffix = '_setpassword' + form_class = ChangeDatabaseUserPasswordForm + + def get_form_kwargs(self): + kwargs = super(ChangeDatabaseUserPassword, self).get_form_kwargs() + kwargs['hostingpackage'] = self.get_hosting_package() + return kwargs + + def get_context_data(self, **kwargs): + context = super(ChangeDatabaseUserPassword, self).get_context_data( + **kwargs) + context['hostingpackage'] = self.get_hosting_package() + context['customer'] = self.get_customer_object() + return context + + def form_valid(self, form): + db_user = form.save() + messages.success( + self.request, + _('Successfully changed password of database user {dbuser}' + ).format(dbuser=db_user.name) + ) + return redirect(self.get_hosting_package())