Coverage for webapp/decorators.py: 87%

23 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-28 22:05 +0000

1# Core packages 

2import functools 

3 

4# Third party packages 

5import flask 

6 

7from canonicalwebteam.store_api.publishergw import PublisherGW 

8 

9from webapp import authentication 

10from webapp.helpers import api_publisher_session 

11 

12publisher_gateway = PublisherGW(api_publisher_session) 

13 

14 

15def login_required(func): 

16 """ 

17 Decorator that checks if a user is logged in, and redirects 

18 to login page if not. 

19 """ 

20 

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}") 

26 

27 return func(*args, **kwargs) 

28 

29 return is_user_logged_in 

30 

31 

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) 

42 

43 return is_exchanged