mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 08:46:10 -06:00
12589 change password in edit view
This commit is contained in:
parent
32f772d1d7
commit
1a33637e08
@ -199,25 +199,30 @@ class UserForm(BootstrapMixin, forms.ModelForm):
|
|||||||
# Adjust form fields depending if Add or Edit
|
# Adjust form fields depending if Add or Edit
|
||||||
if self.instance.pk:
|
if self.instance.pk:
|
||||||
self.fields['object_permissions'].initial = self.instance.object_permissions.all().values_list('id', flat=True)
|
self.fields['object_permissions'].initial = self.instance.object_permissions.all().values_list('id', flat=True)
|
||||||
self.fields['password'].disabled = True
|
pw_field = self.fields['password']
|
||||||
self.fields['password'].required = False
|
pwc_field = self.fields['confirm_password']
|
||||||
self.fields['password'].help_text = _(
|
pw_field.required = False
|
||||||
"Raw passwords are not stored, so there is no way to see this "
|
pw_field.widget.attrs.pop('required')
|
||||||
"user’s password, but you can change the password using "
|
pw_field.help_text = _("Leave empty to keep the old password.")
|
||||||
'<a href="{url}">this form</a>.'
|
pwc_field.required = False
|
||||||
).format(url=reverse('users:change_user_password', args=[self.instance.pk]))
|
pwc_field.widget.attrs.pop('required')
|
||||||
print(self.fields['password'].help_text)
|
|
||||||
del self.fields['confirm_password']
|
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
edited = getattr(self, 'instance', None)
|
||||||
instance = super().save(*args, **kwargs)
|
instance = super().save(*args, **kwargs)
|
||||||
instance.object_permissions.set(self.cleaned_data['object_permissions'])
|
instance.object_permissions.set(self.cleaned_data['object_permissions'])
|
||||||
|
|
||||||
|
# On edit, check if we have to save the password
|
||||||
|
if edited and self.cleaned_data.get("password"):
|
||||||
|
instance.set_password(self.cleaned_data.get("password"))
|
||||||
|
instance.save()
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
cleaned_data = super().clean()
|
cleaned_data = super().clean()
|
||||||
instance = getattr(self, 'instance', None)
|
instance = getattr(self, 'instance', None)
|
||||||
if not instance:
|
if not instance or cleaned_data.get("password"):
|
||||||
password = cleaned_data.get("password")
|
password = cleaned_data.get("password")
|
||||||
confirm_password = cleaned_data.get("confirm_password")
|
confirm_password = cleaned_data.get("confirm_password")
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ urlpatterns = [
|
|||||||
path('users/edit/', views.NetBoxUserBulkEditView.as_view(), name='netboxuser_bulk_edit'),
|
path('users/edit/', views.NetBoxUserBulkEditView.as_view(), name='netboxuser_bulk_edit'),
|
||||||
path('users/delete/', views.NetBoxUserBulkDeleteView.as_view(), name='netboxuser_bulk_delete'),
|
path('users/delete/', views.NetBoxUserBulkDeleteView.as_view(), name='netboxuser_bulk_delete'),
|
||||||
path('users/<int:pk>/', include(get_model_urls('users', 'netboxuser'))),
|
path('users/<int:pk>/', include(get_model_urls('users', 'netboxuser'))),
|
||||||
path('users/password/<int:pk>/', views.NetBoxUserChangePasswordView.as_view(), name='change_user_password'),
|
|
||||||
|
|
||||||
# Groups
|
# Groups
|
||||||
path('groups/', views.NetBoxGroupListView.as_view(), name='netboxgroup_list'),
|
path('groups/', views.NetBoxGroupListView.as_view(), name='netboxgroup_list'),
|
||||||
|
@ -414,52 +414,6 @@ class NetBoxUserBulkDeleteView(generic.BulkDeleteView):
|
|||||||
return get_permission_for_model(User, 'delete')
|
return get_permission_for_model(User, 'delete')
|
||||||
|
|
||||||
|
|
||||||
class NetBoxUserChangePasswordView(LoginRequiredMixin, View):
|
|
||||||
template_name = 'users/passworduser.html'
|
|
||||||
queryset = User.objects.all()
|
|
||||||
|
|
||||||
def get_object(self, **kwargs):
|
|
||||||
"""
|
|
||||||
Return an object for editing. If no keyword arguments have been specified, this will be a new instance.
|
|
||||||
"""
|
|
||||||
if not kwargs:
|
|
||||||
# We're creating a new object
|
|
||||||
return self.queryset.model()
|
|
||||||
return get_object_or_404(self.queryset, **kwargs)
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
obj = self.get_object(**kwargs)
|
|
||||||
|
|
||||||
# LDAP users cannot change their password here
|
|
||||||
if getattr(obj, 'ldap_username', None):
|
|
||||||
messages.warning(request, "LDAP-authenticated user credentials cannot be changed within NetBox.")
|
|
||||||
return redirect('users:netboxuser_list')
|
|
||||||
|
|
||||||
form = forms.PasswordSetForm(user=obj)
|
|
||||||
|
|
||||||
return render(request, self.template_name, {
|
|
||||||
'form': form,
|
|
||||||
'active_tab': 'password',
|
|
||||||
'object': obj,
|
|
||||||
})
|
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
obj = self.get_object(**kwargs)
|
|
||||||
|
|
||||||
form = forms.PasswordSetForm(user=obj, data=request.POST)
|
|
||||||
if form.is_valid():
|
|
||||||
form.save()
|
|
||||||
update_session_auth_hash(request, form.user)
|
|
||||||
messages.success(request, "The password has been changed successfully.")
|
|
||||||
return redirect('users:netboxuser_list')
|
|
||||||
|
|
||||||
return render(request, self.template_name, {
|
|
||||||
'form': form,
|
|
||||||
'active_tab': 'password',
|
|
||||||
'object': obj,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Groups
|
# Groups
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user