Coverage for webapp/decorators.py: 87%
23 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
1# Core packages
2import functools
4# Third party packages
5import flask
7from canonicalwebteam.store_api.publishergw import PublisherGW
9from webapp import authentication
10from webapp.helpers import api_publisher_session
12publisher_gateway = PublisherGW(api_publisher_session)
15def login_required(func):
16 """
17 Decorator that checks if a user is logged in, and redirects
18 to login page if not.
19 """
21 @functools.wraps(func)
22 def is_user_logged_in(*args, **kwargs):
23 if not authentication.is_authenticated(flask.session):
24 authentication.empty_session(flask.session)
25 return flask.redirect(f"/login?next={flask.request.path}")
27 return func(*args, **kwargs)
29 return is_user_logged_in
32def exchange_required(func):
33 @functools.wraps(func)
34 def is_exchanged(*args, **kwargs):
35 if "exchanged_developer_token" not in flask.session:
36 result = publisher_gateway.exchange_dashboard_macaroons(
37 flask.session
38 )
39 flask.session["developer_token"] = result
40 flask.session["exchanged_developer_token"] = True
41 return func(*args, **kwargs)
43 return is_exchanged