Skip to content
Snippets Groups Projects
Verified Commit 29cceb86 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Allow configuring username regex

parent c66ada71
No related branches found
No related tags found
1 merge request!980Resolve "Add configurable username validator for signup"
Pipeline #56497 passed
...@@ -18,6 +18,7 @@ Added ...@@ -18,6 +18,7 @@ Added
* Create a reusable snippet for avatar content. * Create a reusable snippet for avatar content.
* Allow to configure if additional field is required * Allow to configure if additional field is required
* Allow to configure description of additional fields * Allow to configure description of additional fields
* Allow configuring regex for allowed usernames
Changed Changed
~~~~~~~ ~~~~~~~
......
...@@ -279,6 +279,14 @@ class SignupEnabled(BooleanPreference): ...@@ -279,6 +279,14 @@ class SignupEnabled(BooleanPreference):
verbose_name = _("Enable signup") verbose_name = _("Enable signup")
@site_preferences_registry.register
class AllowedUsernameRegex(StringPreference):
section = auth
name = "allowed_username_regex"
default = ".+"
verbose_name = _("Regular expression for allowed usernames")
@site_preferences_registry.register @site_preferences_registry.register
class InviteEnabled(BooleanPreference): class InviteEnabled(BooleanPreference):
section = auth section = auth
......
...@@ -362,6 +362,9 @@ ACCOUNT_SIGNUP_EMAIL_ENTER_TWICE = True ...@@ -362,6 +362,9 @@ ACCOUNT_SIGNUP_EMAIL_ENTER_TWICE = True
# Enforce uniqueness of email addresses # Enforce uniqueness of email addresses
ACCOUNT_UNIQUE_EMAIL = _settings.get("auth.login.registration.unique_email", True) ACCOUNT_UNIQUE_EMAIL = _settings.get("auth.login.registration.unique_email", True)
# Configurable username validators
ACCOUNT_USERNAME_VALIDATORS = "aleksis.core.util.auth_helpers.custom_username_validators"
# Configuration for django-invitations # Configuration for django-invitations
# Use custom account adapter # Use custom account adapter
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
from typing import Any, Optional from typing import Any, Optional
from django.conf import settings from django.conf import settings
from django.contrib.auth.validators import ASCIIUsernameValidator
from django.core.validators import RegexValidator
from django.http import HttpRequest from django.http import HttpRequest
from allauth.account.adapter import DefaultAccountAdapter from allauth.account.adapter import DefaultAccountAdapter
...@@ -134,3 +136,11 @@ class ClientProtectedResourceMixin(_ClientProtectedResourceMixin): ...@@ -134,3 +136,11 @@ class ClientProtectedResourceMixin(_ClientProtectedResourceMixin):
required_scopes = set(self.get_scopes() or []) required_scopes = set(self.get_scopes() or [])
allowed_scopes = set(AppScopes().get_available_scopes(oauth_request.client) or []) allowed_scopes = set(AppScopes().get_available_scopes(oauth_request.client) or [])
return required_scopes.issubset(allowed_scopes) return required_scopes.issubset(allowed_scopes)
def validate_username_preference_regex(value: str):
regex = get_site_preferences()["auth__allowed_username_regex"]
return RegexValidator(regex)(value)
custom_username_validators = [validate_username_preference_regex, ASCIIUsernameValidator()]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment