mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 11:16:47 +00:00
SHOW_PROFILE_EDIT_PASSWORD was replaced in 2020 by the change_password permission, settable per user or group. A post_migrate hook applied the old setting to all users so existing installs kept their behavior, and asked to remove the setting afterwards; but the settings template still set it to True. Every migrate, so every upgrade, therefore granted the permission to all users again and undid an admin's per-user or per-group choice (with False it would have revoked it from everyone). - Migration accounts.0008 applies the setting one last time, if a settings.py still has it; the post_migrate hook is gone. - New users get the permission when they are created (any path, including LDAP); the admin user form ticks it and saves the admin's choice afterwards. - The template no longer sets SHOW_PROFILE_EDIT_PASSWORD; a check (accounts.W001) asks to remove it from existing settings, and the README upgrade notes say so. The test that removes the permission and runs migrate fails on the previous code. An upgrade from master with users was simulated: the setting is applied once, and a permission removed afterwards stays removed through the next migrate.
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
from django.conf import settings
|
|
from django.core.checks import Error, Tags, Warning, register
|
|
|
|
|
|
@register(Tags.security)
|
|
def password_change_middleware_check(app_configs, **kwargs):
|
|
middleware = list(settings.MIDDLEWARE)
|
|
required = "accounts.middleware.ForcePasswordChangeMiddleware"
|
|
authentication = "django.contrib.auth.middleware.AuthenticationMiddleware"
|
|
if required not in middleware or (
|
|
authentication in middleware
|
|
and middleware.index(required) < middleware.index(authentication)
|
|
):
|
|
return [
|
|
Error(
|
|
"ForcePasswordChangeMiddleware must follow AuthenticationMiddleware.",
|
|
hint=f"Add '{required}' to MIDDLEWARE in webvirtcloud/settings.py; see README.md.",
|
|
id="accounts.E001",
|
|
)
|
|
]
|
|
return []
|
|
|
|
|
|
@register(Tags.security)
|
|
def login_required_middleware_check(app_configs, **kwargs):
|
|
middleware = list(settings.MIDDLEWARE)
|
|
required = "django.contrib.auth.middleware.LoginRequiredMiddleware"
|
|
old = "login_required.middleware.LoginRequiredMiddleware"
|
|
if old in middleware or required not in middleware:
|
|
return [
|
|
Error(
|
|
"MIDDLEWARE must use Django's LoginRequiredMiddleware.",
|
|
hint=f"In webvirtcloud/settings.py replace '{old}' with '{required}' "
|
|
"and delete LOGIN_REQUIRED_IGNORE_VIEW_NAMES; see README.md.",
|
|
id="accounts.E002",
|
|
)
|
|
]
|
|
return []
|
|
|
|
|
|
@register()
|
|
def obsolete_settings_check(app_configs, **kwargs):
|
|
if hasattr(settings, "SHOW_PROFILE_EDIT_PASSWORD"):
|
|
return [
|
|
Warning(
|
|
"SHOW_PROFILE_EDIT_PASSWORD is no longer used.",
|
|
hint="Remove it from webvirtcloud/settings.py. Whether a user may change their own "
|
|
"password is the 'Can change password' permission, per user or group.",
|
|
id="accounts.W001",
|
|
)
|
|
]
|
|
return []
|
|
|