views: move login code to separate method (#55557)

This commit is contained in:
Valentin Deniaud 2021-08-03 11:12:18 +02:00
parent e4bec98bbe
commit dde8fa5d02
1 changed files with 17 additions and 18 deletions

View File

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