From dde8fa5d026f69a0bd1ae41468741412f901816b Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 3 Aug 2021 11:12:18 +0200 Subject: [PATCH 1/2] views: move login code to separate method (#55557) --- mellon/views.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/mellon/views.py b/mellon/views.py index dcea735..04b96b7 100644 --- a/mellon/views.py +++ b/mellon/views.py @@ -277,24 +277,7 @@ class LoginView(ProfileMixin, LogMixin, View): next_url = self.get_next_url(default=resolve_url(settings.LOGIN_REDIRECT_URL)) if user is not None: if user.is_active: - utils.login(request, user) - session_index = attributes['session_index'] - if session_index: - if not request.session.session_key: - request.session.create() - models.SessionIndex.objects.get_or_create( - saml_identifier=user.saml_identifier, - session_key=request.session.session_key, - session_index=session_index, - ) - self.log.info( - 'user %s (NameID is %r) logged in using SAML', user, attributes['name_id_content'] - ) - request.session['mellon_session'] = utils.flatten_datetime(attributes) - if 'session_not_on_or_after' in attributes and not settings.SESSION_EXPIRE_AT_BROWSER_CLOSE: - request.session.set_expiry( - utils.get_seconds_expiry(attributes['session_not_on_or_after']) - ) + self.login(user, attributes) else: self.log.warning( 'user %s (NameID is %r) is inactive, login refused', user, attributes['name_id_content'] @@ -309,6 +292,22 @@ class LoginView(ProfileMixin, LogMixin, View): return HttpResponseRedirect(next_url) + def login(self, user, attributes): + utils.login(self.request, user) + session_index = attributes['session_index'] + if session_index: + if not self.request.session.session_key: + self.request.session.create() + models.SessionIndex.objects.get_or_create( + saml_identifier=user.saml_identifier, + session_key=self.request.session.session_key, + session_index=session_index, + ) + self.log.info('user %s (NameID is %r) logged in using SAML', user, attributes['name_id_content']) + self.request.session['mellon_session'] = utils.flatten_datetime(attributes) + if 'session_not_on_or_after' in attributes and not settings.SESSION_EXPIRE_AT_BROWSER_CLOSE: + self.request.session.set_expiry(utils.get_seconds_expiry(attributes['session_not_on_or_after'])) + def retry_login(self): """Retry login if it failed for a temporary error. -- 2.20.1