Files
atst/atst/domain/auth.py
Patrick Smith 90c3c30064 Add logout route to "unprotected" routes
The logout route doesn't strictly require the user to be logged in and
was causing errors with the new profile completeness enforcement.
2018-10-30 15:44:25 -04:00

61 lines
1.4 KiB
Python

from flask import g, redirect, url_for, session, request
from atst.domain.users import Users
UNPROTECTED_ROUTES = [
"atst.root",
"dev.login_dev",
"atst.login_redirect",
"atst.logout",
"atst.unauthorized",
"atst.helpdocs",
"static",
"atst.about",
]
def apply_authentication(app):
@app.before_request
# pylint: disable=unused-variable
def enforce_login():
user = get_current_user()
if user:
g.current_user = user
if should_redirect_to_user_profile(request, user):
return redirect(url_for("users.user", next=request.path))
elif not _unprotected_route(request):
return redirect(url_for("atst.root", next=request.path))
def should_redirect_to_user_profile(request, user):
has_complete_profile = user.profile_complete
is_unprotected_route = _unprotected_route(request)
is_requesting_user_endpoint = request.endpoint in [
"users.user",
"users.update_user",
]
if has_complete_profile or is_unprotected_route or is_requesting_user_endpoint:
return False
return True
def get_current_user():
user_id = session.get("user_id")
if user_id:
return Users.get(user_id)
else:
return False
def logout():
if session.get("user_id"):
del (session["user_id"])
def _unprotected_route(request):
if request.endpoint in UNPROTECTED_ROUTES:
return True