Skip to content
Snippets Groups Projects
Commit fefac582 authored by Julian's avatar Julian
Browse files

Make request.session behaviour consistent with request.user

parent 11502833
Branches
No related tags found
No related merge requests found
...@@ -21,6 +21,7 @@ def set_request_user(): ...@@ -21,6 +21,7 @@ def set_request_user():
request.user = None request.user = None
request.user_pre_mfa = None request.user_pre_mfa = None
request.session = None request.session = None
request.session_pre_mfa = None
if 'id' not in session: if 'id' not in session:
return return
if 'secret' not in session: if 'secret' not in session:
...@@ -35,9 +36,10 @@ def set_request_user(): ...@@ -35,9 +36,10 @@ def set_request_user():
db.session.commit() db.session.commit()
if _session.user.is_deactivated or not _session.user.is_in_group(current_app.config['ACL_ACCESS_GROUP']): if _session.user.is_deactivated or not _session.user.is_in_group(current_app.config['ACL_ACCESS_GROUP']):
return return
request.session = _session request.session_pre_mfa = _session
request.user_pre_mfa = _session.user request.user_pre_mfa = _session.user
if _session.mfa_done: if _session.mfa_done:
request.session = _session
request.user = _session.user request.user = _session.user
@bp.route("/logout") @bp.route("/logout")
...@@ -45,8 +47,8 @@ def logout(): ...@@ -45,8 +47,8 @@ def logout():
# The oauth2 module takes data from `session` and injects it into the url, # The oauth2 module takes data from `session` and injects it into the url,
# so we need to build the url BEFORE we clear the session! # so we need to build the url BEFORE we clear the session!
resp = redirect(url_for('oauth2.logout', ref=request.values.get('ref', url_for('.login')))) resp = redirect(url_for('oauth2.logout', ref=request.values.get('ref', url_for('.login'))))
if request.session: if request.session_pre_mfa:
db.session.delete(request.session) db.session.delete(request.session_pre_mfa)
db.session.commit() db.session.commit()
session.clear() session.clear()
return resp return resp
...@@ -138,10 +140,10 @@ def login_required(permission_check=lambda: True): ...@@ -138,10 +140,10 @@ def login_required(permission_check=lambda: True):
@login_required_pre_mfa() @login_required_pre_mfa()
def mfa_auth(): def mfa_auth():
if not request.user_pre_mfa.mfa_enabled: if not request.user_pre_mfa.mfa_enabled:
request.session.mfa_done = True request.session_pre_mfa.mfa_done = True
db.session.commit() db.session.commit()
set_request_user() set_request_user()
if request.session.mfa_done: if request.session_pre_mfa.mfa_done:
return secure_local_redirect(request.values.get('ref', url_for('index'))) return secure_local_redirect(request.values.get('ref', url_for('index')))
return render_template('session/mfa_auth.html', ref=request.values.get('ref')) return render_template('session/mfa_auth.html', ref=request.values.get('ref'))
...@@ -154,14 +156,14 @@ def mfa_auth_finish(): ...@@ -154,14 +156,14 @@ def mfa_auth_finish():
return redirect(url_for('session.mfa_auth', ref=request.values.get('ref'))) return redirect(url_for('session.mfa_auth', ref=request.values.get('ref')))
for method in request.user_pre_mfa.mfa_totp_methods: for method in request.user_pre_mfa.mfa_totp_methods:
if method.verify(request.form['code']): if method.verify(request.form['code']):
request.session.mfa_done = True request.session_pre_mfa.mfa_done = True
db.session.commit() db.session.commit()
set_request_user() set_request_user()
return secure_local_redirect(request.values.get('ref', url_for('index'))) return secure_local_redirect(request.values.get('ref', url_for('index')))
for method in request.user_pre_mfa.mfa_recovery_codes: for method in request.user_pre_mfa.mfa_recovery_codes:
if method.verify(request.form['code']): if method.verify(request.form['code']):
db.session.delete(method) db.session.delete(method)
request.session.mfa_done = True request.session_pre_mfa.mfa_done = True
db.session.commit() db.session.commit()
set_request_user() set_request_user()
if len(request.user_pre_mfa.mfa_recovery_codes) <= 1: if len(request.user_pre_mfa.mfa_recovery_codes) <= 1:
...@@ -209,7 +211,7 @@ if WEBAUTHN_SUPPORTED: ...@@ -209,7 +211,7 @@ if WEBAUTHN_SUPPORTED:
auth_data, auth_data,
signature, signature,
) )
request.session.mfa_done = True request.session_pre_mfa.mfa_done = True
db.session.commit() db.session.commit()
set_request_user() set_request_user()
return cbor.encode({"status": "OK"}) return cbor.encode({"status": "OK"})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment