Coverage for app/logic/loginManager.py: 25%

36 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-03-18 17:14 +0000

1from flask import request, session, abort 

2from peewee import DoesNotExist 

3 

4from app import app 

5from app.models.user import User 

6from app.models.term import Term 

7 

8 

9def logout(): 

10 """ 

11 Erases the session and returns the URL for redirection 

12 """ 

13 if 'username' in session: 

14 print("Logging out", session['username']) 

15 session.clear() 

16 

17 url ="/" 

18 if app.config['use_shibboleth']: 

19 url = "/Shibboleth.sso/Logout" 

20 return url 

21 

22def getUsernameFromEnvironment(): 

23 if "username" in session: 

24 username = session["username"] 

25 

26 shibKey = "eppn" 

27 if app.config['use_shibboleth']: 

28 if not shibKey in request.environ: 

29 print("No Shibboleth session present! Aborting") 

30 abort(403) 

31 

32 username = request.environ[shibKey].split("@")[0].split('/')[-1].lower() 

33 return username 

34 

35 else: 

36 return app.config['default_user'] 

37 

38def getLoginUser(): 

39 username = getUsernameFromEnvironment() 

40 

41 try: 

42 user = User.get_by_id(username) 

43 except DoesNotExist as e: 

44 # Create the user from Shibboleth 

45 # FIXME We need to identify the proper shibboleth attributes to insert into user 

46 user = User.create( 

47 username=username, 

48 firstName="Not", 

49 lastName="Yet", 

50 email=f"{username}@berea.edu", 

51 bnumber="B00055555") 

52 

53 if 'username' not in session: 

54 print("Logging in as", user.username) 

55 session['username'] = user.username 

56 

57 return user 

58 

59def getCurrentTerm(): 

60 return Term.get_or_none(isCurrentTerm = True)