|
39 | 39 | from two_factor import signals |
40 | 40 | from two_factor.plugins.registry import MethodNotFoundError, registry |
41 | 41 | from two_factor.utils import totp_digits |
42 | | -from two_factor.views.mixins import OTPRequiredMixin |
| 42 | +from two_factor.views.mixins import DeviceContextDataMixin, OTPRequiredMixin |
43 | 43 |
|
44 | 44 | from ..forms import ( |
45 | 45 | AuthenticationTokenForm, BackupTokenForm, DeviceValidationForm, MethodForm, |
@@ -72,7 +72,7 @@ def login_not_required(view_func): |
72 | 72 | [login_not_required, sensitive_post_parameters(), csrf_protect, never_cache], |
73 | 73 | name='dispatch' |
74 | 74 | ) |
75 | | -class LoginView(RedirectURLMixin, IdempotentSessionWizardView): |
| 75 | +class LoginView(DeviceContextDataMixin, RedirectURLMixin, IdempotentSessionWizardView): |
76 | 76 | """ |
77 | 77 | View for handling the login process, including OTP verification. |
78 | 78 |
|
@@ -341,7 +341,7 @@ def render(self, form=None, **kwargs): |
341 | 341 | if self.steps.current == self.TOKEN_STEP: |
342 | 342 | form_with_errors = form and form.is_bound and not form.is_valid() |
343 | 343 | if not form_with_errors: |
344 | | - self.get_device().generate_challenge() |
| 344 | + self.generate_challenge_with_context(self.get_device()) |
345 | 345 | return super().render(form, **kwargs) |
346 | 346 |
|
347 | 347 | def get_user(self): |
@@ -427,7 +427,7 @@ def dispatch(self, request, *args, **kwargs): |
427 | 427 |
|
428 | 428 |
|
429 | 429 | @method_decorator([never_cache, login_required], name='dispatch') |
430 | | -class SetupView(RedirectURLMixin, IdempotentSessionWizardView): |
| 430 | +class SetupView(DeviceContextDataMixin, RedirectURLMixin, IdempotentSessionWizardView): |
431 | 431 | """ |
432 | 432 | View for handling OTP setup using a wizard. |
433 | 433 |
|
@@ -522,7 +522,7 @@ def render_next_step(self, form, **kwargs): |
522 | 522 | next_step = self.steps.next |
523 | 523 | if next_step == 'validation': |
524 | 524 | try: |
525 | | - self.get_device().generate_challenge() |
| 525 | + self.generate_challenge_with_context(self.get_device()) |
526 | 526 | kwargs["challenge_succeeded"] = True |
527 | 527 | except Exception: |
528 | 528 | logger.exception("Could not generate challenge") |
|
0 commit comments