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:
Jens Langhammer 2021-06-10 12:17:46 +02:00
parent 9f7c941426
commit 2275ba3add
2 changed files with 7 additions and 4 deletions

View File

@ -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):

View File

@ -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)