flows: fix get_pending_user returning in-memory user when PLAN_CONTEXT_PENDING_USER_IDENTIFIER is set
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
9f7c941426
commit
2275ba3add
|
@ -50,14 +50,17 @@ class StageView(View):
|
||||||
self.executor = executor
|
self.executor = executor
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
def get_pending_user(self) -> User:
|
def get_pending_user(self, for_display=False) -> User:
|
||||||
"""Either show the matched User object or show what the user entered,
|
"""Either show the matched User object or show what the user entered,
|
||||||
based on what the earlier stage (mostly IdentificationStage) set.
|
based on what the earlier stage (mostly IdentificationStage) set.
|
||||||
_USER_IDENTIFIER overrides the first User, as PENDING_USER is used for
|
_USER_IDENTIFIER overrides the first User, as PENDING_USER is used for
|
||||||
other things besides the form display.
|
other things besides the form display.
|
||||||
|
|
||||||
If no user is pending, returns request.user"""
|
If no user is pending, returns request.user"""
|
||||||
if PLAN_CONTEXT_PENDING_USER_IDENTIFIER in self.executor.plan.context:
|
if (
|
||||||
|
PLAN_CONTEXT_PENDING_USER_IDENTIFIER in self.executor.plan.context
|
||||||
|
and for_display
|
||||||
|
):
|
||||||
return User(
|
return User(
|
||||||
username=self.executor.plan.context.get(
|
username=self.executor.plan.context.get(
|
||||||
PLAN_CONTEXT_PENDING_USER_IDENTIFIER
|
PLAN_CONTEXT_PENDING_USER_IDENTIFIER
|
||||||
|
@ -109,7 +112,7 @@ class ChallengeStageView(StageView):
|
||||||
# If there's a pending user, update the `username` field
|
# If there's a pending user, update the `username` field
|
||||||
# this field is only used by password managers.
|
# this field is only used by password managers.
|
||||||
# If there's no user set, an error is raised later.
|
# If there's no user set, an error is raised later.
|
||||||
if user := self.get_pending_user():
|
if user := self.get_pending_user(for_display=True):
|
||||||
challenge.initial_data["pending_user"] = user.username
|
challenge.initial_data["pending_user"] = user.username
|
||||||
challenge.initial_data["pending_user_avatar"] = DEFAULT_AVATAR
|
challenge.initial_data["pending_user_avatar"] = DEFAULT_AVATAR
|
||||||
if not isinstance(user, AnonymousUser):
|
if not isinstance(user, AnonymousUser):
|
||||||
|
|
|
@ -511,4 +511,4 @@ class TestFlowExecutor(TestCase):
|
||||||
executor.flow = flow
|
executor.flow = flow
|
||||||
|
|
||||||
stage_view = StageView(executor)
|
stage_view = StageView(executor)
|
||||||
self.assertEqual(ident, stage_view.get_pending_user().username)
|
self.assertEqual(ident, stage_view.get_pending_user(for_display=True).username)
|
||||||
|
|
Reference in New Issue