Coverage for gws-app/gws/base/auth/cli.py: 0%

49 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 01:37 +0200

1from typing import Optional, cast 

2 

3import gws 

4import gws.config 

5import gws.lib.datetimex as dtx 

6import gws.lib.cli as cli 

7 

8from . import manager 

9 

10gws.ext.new.cli('auth') 

11 

12 

13class RemoveParams(gws.CliParams): 

14 older: Optional[int] 

15 """Remove sessions older than N seconds.""" 

16 uid: Optional[list[str]] 

17 """Remove specific sessions.""" 

18 all: Optional[bool] 

19 """Remove all sessions.""" 

20 

21 

22class Object(gws.Node): 

23 

24 @gws.ext.command.cli('authSessions') 

25 def sessions(self, p: gws.EmptyRequest): 

26 """Show active authorization sessions""" 

27 

28 root = gws.config.load() 

29 sm = root.app.authMgr.sessionMgr 

30 

31 rows = [] 

32 

33 for s in sm.get_all(): 

34 dc = dtx.total_difference(s.created).seconds 

35 du = dtx.total_difference(s.updated).seconds 

36 rows.append((du, dict( 

37 uid=s.uid, 

38 user=s.user.loginName, 

39 auth=s.method.extType, 

40 started=dtx.to_iso_string(s.created, sep=' ') + f' ({dc} sec)', 

41 updated=dtx.to_iso_string(s.updated, sep=' ') + f' ({du} sec)', 

42 ))) 

43 

44 # oldest first 

45 rows.sort(key=lambda r: -r[0]) 

46 

47 cli.info('') 

48 cli.info(f'Active sessions: {len(rows)}') 

49 cli.info(cli.text_table([r[1] for r in rows], header='auto')) 

50 

51 @gws.ext.command.cli('authSessrem') 

52 def sessrem(self, p: RemoveParams): 

53 """Remove authorization sessions.""" 

54 

55 root = gws.config.load() 

56 sm = root.app.authMgr.sessionMgr 

57 

58 n = 0 

59 

60 for s in sm.get_all(): 

61 du = dtx.total_difference(s.updated).seconds 

62 if p.all: 

63 sm.delete(s) 

64 n += 1 

65 continue 

66 if p.older and du > p.older: 

67 sm.delete(s) 

68 n += 1 

69 continue 

70 if p.uid and s.uid in p.uid: 

71 sm.delete(s) 

72 n += 1 

73 continue 

74 

75 cli.info('') 

76 cli.info(f'Removed sessions: {n}')