mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-23 15:33:45 +00:00
Merge branch 'fix_268' into 'dev'
Fix 268 See merge request re2o/re2o!537
This commit is contained in:
commit
c3227b52de
2 changed files with 117 additions and 143 deletions
|
@ -50,10 +50,8 @@ from .models import (
|
|||
LdapUserGroup,
|
||||
)
|
||||
from .forms import (
|
||||
UserChangeForm,
|
||||
UserCreationForm,
|
||||
ServiceUserChangeForm,
|
||||
ServiceUserCreationForm,
|
||||
UserAdminForm,
|
||||
ServiceUserAdminForm,
|
||||
)
|
||||
|
||||
|
||||
|
@ -130,36 +128,29 @@ class WhitelistAdmin(VersionAdmin):
|
|||
pass
|
||||
|
||||
|
||||
class UserAdmin(VersionAdmin, BaseUserAdmin):
|
||||
"""Gestion d'un user : modification des champs perso, mot de passe, etc"""
|
||||
|
||||
class AdherentAdmin(VersionAdmin, BaseUserAdmin):
|
||||
# The forms to add and change user instances
|
||||
form = UserChangeForm
|
||||
add_form = UserCreationForm
|
||||
|
||||
# The fields to be used in displaying the User model.
|
||||
# These override the definitions on the base UserAdmin
|
||||
# that reference specific fields on auth.User.
|
||||
add_form = UserAdminForm
|
||||
form = UserAdminForm
|
||||
|
||||
list_display = (
|
||||
"pseudo",
|
||||
"name",
|
||||
"surname",
|
||||
"email",
|
||||
"local_email_redirect",
|
||||
"local_email_enabled",
|
||||
"school",
|
||||
"is_admin",
|
||||
"shell",
|
||||
)
|
||||
# Need to reset the settings from BaseUserAdmin
|
||||
# They are using fields we don't use like 'is_staff'
|
||||
list_filter = ()
|
||||
fieldsets = (
|
||||
(None, {"fields": ("pseudo", "password")}),
|
||||
(None, {"fields": ("pseudo",)}),
|
||||
(
|
||||
"Personal info",
|
||||
{"fields": ("surname", "email", "school", "shell", "uid_number", "profile_image")},
|
||||
{"fields": ("surname", "name", "email", "school", "shell", "uid_number", "profile_image", "password1", "password2")},
|
||||
),
|
||||
("Permissions", {"fields": ("is_admin",)}),
|
||||
)
|
||||
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
|
||||
# overrides get_fieldsets to use this attribute when creating a user.
|
||||
|
@ -171,12 +162,59 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
|
|||
"fields": (
|
||||
"pseudo",
|
||||
"surname",
|
||||
"name",
|
||||
"email",
|
||||
"school",
|
||||
"is_admin",
|
||||
"password1",
|
||||
"password2",
|
||||
"profile_image",
|
||||
"is_superuser",
|
||||
),
|
||||
},
|
||||
),
|
||||
)
|
||||
search_fields = ("pseudo", "surname", "name")
|
||||
ordering = ("pseudo",)
|
||||
filter_horizontal = ()
|
||||
|
||||
|
||||
class ClubAdmin(VersionAdmin, BaseUserAdmin):
|
||||
# The forms to add and change user instances
|
||||
add_form = UserAdminForm
|
||||
form = UserAdminForm
|
||||
|
||||
list_display = (
|
||||
"pseudo",
|
||||
"surname",
|
||||
"email",
|
||||
"local_email_redirect",
|
||||
"local_email_enabled",
|
||||
"school",
|
||||
"shell",
|
||||
)
|
||||
list_filter = ()
|
||||
fieldsets = (
|
||||
(None, {"fields": ("pseudo",)}),
|
||||
(
|
||||
"Personal info",
|
||||
{"fields": ("surname", "email", "school", "shell", "uid_number", "profile_image", "password1", "password2")},
|
||||
),
|
||||
)
|
||||
|
||||
add_fieldsets = (
|
||||
(
|
||||
None,
|
||||
{
|
||||
"classes": ("wide",),
|
||||
"fields": (
|
||||
"pseudo",
|
||||
"surname",
|
||||
"email",
|
||||
"school",
|
||||
"password1",
|
||||
"password2",
|
||||
"profile_image",
|
||||
"is_superuser",
|
||||
),
|
||||
},
|
||||
),
|
||||
|
@ -191,15 +229,15 @@ class ServiceUserAdmin(VersionAdmin, BaseUserAdmin):
|
|||
mot de passe; etc"""
|
||||
|
||||
# The forms to add and change user instances
|
||||
form = ServiceUserChangeForm
|
||||
add_form = ServiceUserCreationForm
|
||||
form = ServiceUserAdminForm
|
||||
add_form = ServiceUserAdminForm
|
||||
|
||||
# The fields to be used in displaying the User model.
|
||||
# These override the definitions on the base UserAdmin
|
||||
# that reference specific fields on auth.User.
|
||||
list_display = ("pseudo", "access_group")
|
||||
list_filter = ()
|
||||
fieldsets = ((None, {"fields": ("pseudo", "password", "access_group")}),)
|
||||
fieldsets = ((None, {"fields": ("pseudo", "access_group", "comment", "password1", "password2")}),)
|
||||
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
|
||||
# overrides get_fieldsets to use this attribute when creating a user.
|
||||
add_fieldsets = (
|
||||
|
@ -210,9 +248,8 @@ class ServiceUserAdmin(VersionAdmin, BaseUserAdmin):
|
|||
filter_horizontal = ()
|
||||
|
||||
|
||||
admin.site.register(User, UserAdmin)
|
||||
admin.site.register(Adherent, UserAdmin)
|
||||
admin.site.register(Club, UserAdmin)
|
||||
admin.site.register(Adherent, AdherentAdmin)
|
||||
admin.site.register(Club, ClubAdmin)
|
||||
admin.site.register(ServiceUser, ServiceUserAdmin)
|
||||
admin.site.register(LdapUser, LdapUserAdmin)
|
||||
admin.site.register(LdapUserGroup, LdapUserGroupAdmin)
|
||||
|
@ -225,11 +262,6 @@ admin.site.register(Ban, BanAdmin)
|
|||
admin.site.register(EMailAddress, EMailAddressAdmin)
|
||||
admin.site.register(Whitelist, WhitelistAdmin)
|
||||
admin.site.register(Request, RequestAdmin)
|
||||
# Now register the new UserAdmin...
|
||||
admin.site.unregister(User)
|
||||
admin.site.unregister(ServiceUser)
|
||||
admin.site.register(User, UserAdmin)
|
||||
admin.site.register(ServiceUser, ServiceUserAdmin)
|
||||
# ... and, since we're not using Django's built-in permissions,
|
||||
# unregister the Group model from admin.
|
||||
admin.site.unregister(Group)
|
||||
|
|
168
users/forms.py
168
users/forms.py
|
@ -121,8 +121,8 @@ class PassForm(FormRevMixin, FieldPermissionFormMixin, forms.ModelForm):
|
|||
user.save()
|
||||
|
||||
|
||||
class UserCreationForm(FormRevMixin, forms.ModelForm):
|
||||
"""A form for creating new users. Includes all the required
|
||||
class UserAdminForm(FormRevMixin, forms.ModelForm):
|
||||
"""A form for creating new and editing users. Includes all the required
|
||||
fields, plus a repeated password.
|
||||
|
||||
Formulaire pour la création d'un user. N'est utilisé que pour
|
||||
|
@ -133,23 +133,69 @@ class UserCreationForm(FormRevMixin, forms.ModelForm):
|
|||
label=_("Password"),
|
||||
widget=forms.PasswordInput,
|
||||
max_length=255,
|
||||
help_text=password_validators_help_text_html()
|
||||
help_text=password_validators_help_text_html(),
|
||||
required=False,
|
||||
)
|
||||
password2 = forms.CharField(
|
||||
label=_("Password confirmation"),
|
||||
widget=forms.PasswordInput,
|
||||
max_length=255,
|
||||
required=False,
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop("prefix", self.Meta.model.__name__)
|
||||
super(UserAdminForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
self.fields["email"].required = True
|
||||
|
||||
class Meta:
|
||||
fields = ("pseudo", "surname", "name", "email", "is_superuser")
|
||||
|
||||
def clean_password2(self):
|
||||
"""Verifie que password1 et 2 sont identiques"""
|
||||
# Check that the two password entries match
|
||||
password1 = self.cleaned_data.get("password1")
|
||||
password2 = self.cleaned_data.get("password2")
|
||||
if password1 and password2:
|
||||
if password1 and password2 and password1 != password2:
|
||||
raise forms.ValidationError(_("The passwords don't match."))
|
||||
validate_password(password1)
|
||||
return password2
|
||||
|
||||
def save(self, commit=True):
|
||||
# Save the provided password in hashed format
|
||||
user = super(UserAdminForm, self).save(commit=False)
|
||||
if self.cleaned_data["password1"]:
|
||||
user.set_password(self.cleaned_data["password1"])
|
||||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
class ServiceUserAdminForm(FormRevMixin, forms.ModelForm):
|
||||
"""A form for creating new users. Includes all the required
|
||||
fields, plus a repeated password.
|
||||
|
||||
Formulaire pour la creation de nouveaux serviceusers.
|
||||
Requiert seulement un mot de passe; et un pseudo"""
|
||||
|
||||
password1 = forms.CharField(
|
||||
label=_("Password"),
|
||||
widget=forms.PasswordInput,
|
||||
max_length=255,
|
||||
)
|
||||
password2 = forms.CharField(
|
||||
label=_("Password confirmation"),
|
||||
widget=forms.PasswordInput,
|
||||
max_length=255,
|
||||
)
|
||||
is_admin = forms.BooleanField(label=_("Is admin"))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop("prefix", self.Meta.model.__name__)
|
||||
super(UserCreationForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
self.fields["email"].required = True
|
||||
super(ServiceUserAdminForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
||||
class Meta:
|
||||
model = Adherent
|
||||
fields = ("pseudo", "surname", "email")
|
||||
model = ServiceUser
|
||||
fields = ("pseudo",)
|
||||
|
||||
def clean_password2(self):
|
||||
"""Verifie que password1 et 2 sont identiques"""
|
||||
|
@ -158,120 +204,16 @@ class UserCreationForm(FormRevMixin, forms.ModelForm):
|
|||
password2 = self.cleaned_data.get("password2")
|
||||
if password1 and password2 and password1 != password2:
|
||||
raise forms.ValidationError(_("The passwords don't match."))
|
||||
validate_password(password1)
|
||||
return password2
|
||||
|
||||
def save(self, commit=True):
|
||||
# Save the provided password in hashed format
|
||||
user = super(UserCreationForm, self).save(commit=False)
|
||||
user.set_password(self.cleaned_data["password1"])
|
||||
user.save()
|
||||
user.is_admin = self.cleaned_data.get("is_admin")
|
||||
return user
|
||||
|
||||
|
||||
class ServiceUserCreationForm(FormRevMixin, forms.ModelForm):
|
||||
"""A form for creating new users. Includes all the required
|
||||
fields, plus a repeated password.
|
||||
|
||||
Formulaire pour la creation de nouveaux serviceusers.
|
||||
Requiert seulement un mot de passe; et un pseudo"""
|
||||
|
||||
password1 = forms.CharField(
|
||||
label=_("Password"), widget=forms.PasswordInput, min_length=8, max_length=255
|
||||
)
|
||||
password2 = forms.CharField(
|
||||
label=_("Password confirmation"),
|
||||
widget=forms.PasswordInput,
|
||||
min_length=8,
|
||||
max_length=255,
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop("prefix", self.Meta.model.__name__)
|
||||
super(ServiceUserCreationForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
||||
class Meta:
|
||||
model = ServiceUser
|
||||
fields = ("pseudo",)
|
||||
|
||||
def clean_password2(self):
|
||||
"""Verifie que password1 et 2 sont indentiques"""
|
||||
# Check that the two password entries match
|
||||
password1 = self.cleaned_data.get("password1")
|
||||
password2 = self.cleaned_data.get("password2")
|
||||
if password1 and password2 and password1 != password2:
|
||||
raise forms.ValidationError(_("The passwords don't match."))
|
||||
return password2
|
||||
|
||||
def save(self, commit=True):
|
||||
# Save the provided password in hashed format
|
||||
user = super(ServiceUserCreationForm, self).save(commit=False)
|
||||
user = super(ServiceUserAdminForm, self).save(commit=False)
|
||||
user.set_password(self.cleaned_data["password1"])
|
||||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
class UserChangeForm(FormRevMixin, forms.ModelForm):
|
||||
"""A form for updating users. Includes all the fields on
|
||||
the user, but replaces the password field with admin's
|
||||
password hash display field.
|
||||
|
||||
Formulaire pour la modification d'un user coté admin
|
||||
"""
|
||||
|
||||
password = ReadOnlyPasswordHashField()
|
||||
is_admin = forms.BooleanField(label=_("Is admin"), required=False)
|
||||
|
||||
class Meta:
|
||||
model = Adherent
|
||||
fields = ("pseudo", "password", "surname", "email")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop("prefix", self.Meta.model.__name__)
|
||||
super(UserChangeForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
print(_("User is admin: %s") % kwargs["instance"].is_admin)
|
||||
self.initial["is_admin"] = kwargs["instance"].is_admin
|
||||
|
||||
def clean_password(self):
|
||||
"""Dummy fun"""
|
||||
# Regardless of what the user provides, return the initial value.
|
||||
# This is done here, rather than on the field, because the
|
||||
# field does not have access to the initial value
|
||||
return self.initial["password"]
|
||||
|
||||
def save(self, commit=True):
|
||||
# Save the provided password in hashed format
|
||||
user = super(UserChangeForm, self).save(commit=False)
|
||||
user.is_admin = self.cleaned_data.get("is_admin")
|
||||
if commit:
|
||||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
class ServiceUserChangeForm(FormRevMixin, forms.ModelForm):
|
||||
"""A form for updating users. Includes all the fields on
|
||||
the user, but replaces the password field with admin's
|
||||
password hash display field.
|
||||
|
||||
Formulaire pour l'edition des service users coté admin
|
||||
"""
|
||||
|
||||
password = ReadOnlyPasswordHashField()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop("prefix", self.Meta.model.__name__)
|
||||
super(ServiceUserChangeForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
||||
class Meta:
|
||||
model = ServiceUser
|
||||
fields = ("pseudo",)
|
||||
|
||||
def clean_password(self):
|
||||
"""Dummy fun"""
|
||||
return self.initial["password"]
|
||||
|
||||
|
||||
class ResetPasswordForm(forms.Form):
|
||||
"""Formulaire de demande de reinitialisation de mot de passe,
|
||||
mdp oublié"""
|
||||
|
|
Loading…
Reference in a new issue