stages/prompt: fix username field throwing error with existing user (#9342)

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L
2024-04-18 20:54:31 +02:00
committed by GitHub
parent 64d4a19ccf
commit 0a5b8bea5d
2 changed files with 10 additions and 6 deletions

View File

@ -150,22 +150,26 @@ class PromptChallengeResponse(ChallengeResponse):
return attrs
def username_field_validator_factory() -> Callable[[PromptChallenge, str], Any]:
def username_field_validator_factory() -> Callable[[PromptChallengeResponse, str], Any]:
"""Return a `clean_` method for `field`. Clean method checks if username is taken already."""
def username_field_validator(_: PromptChallenge, value: str) -> Any:
def username_field_validator(self: PromptChallengeResponse, value: str) -> Any:
"""Check for duplicate usernames"""
if User.objects.filter(username=value).exists():
pending_user = self.stage.get_pending_user()
query = User.objects.all()
if pending_user.pk:
query = query.exclude(username=pending_user.username)
if query.filter(username=value).exists():
raise ValidationError("Username is already taken.")
return value
return username_field_validator
def password_single_validator_factory() -> Callable[[PromptChallenge, str], Any]:
def password_single_validator_factory() -> Callable[[PromptChallengeResponse, str], Any]:
"""Return a `clean_` method for `field`. Clean method checks if username is taken already."""
def password_single_clean(self: PromptChallenge, value: str) -> Any:
def password_single_clean(self: PromptChallengeResponse, value: str) -> Any:
"""Send password validation signals for e.g. LDAP Source"""
password_validate.send(sender=self, password=value, plan_context=self.plan.context)
return value

View File

@ -16,7 +16,7 @@ entries:
placeholder: Username
placeholder_expression: false
required: true
type: text
type: username
field_key: username
label: Username
identifiers: