Coverage for gws-app/gws/base/auth/cli.py: 0%
50 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 22:59 +0200
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 22:59 +0200
1from typing import Optional, cast
3import gws
4import gws.config
5import gws.lib.datetimex as dtx
6import gws.lib.cli as cli
8from . import manager
10gws.ext.new.cli('auth')
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."""
22class Object(gws.Node):
24 @gws.ext.command.cli('authSessions')
25 def sessions(self, p: gws.EmptyRequest):
26 """Show active authorization sessions"""
28 root = gws.config.load()
29 sm = root.app.authMgr.sessionMgr
31 sm.cleanup()
33 rows = []
35 for s in sm.get_all():
36 dc = dtx.total_difference(s.created).seconds
37 du = dtx.total_difference(s.updated).seconds
38 rows.append((du, dict(
39 uid=s.uid,
40 user=s.user.loginName,
41 auth=s.method.extType,
42 started=dtx.to_iso_string(s.created, sep=' ') + f' ({dc} sec)',
43 updated=dtx.to_iso_string(s.updated, sep=' ') + f' ({du} sec)',
44 )))
46 # oldest first
47 rows.sort(key=lambda r: -r[0])
49 cli.info('')
50 cli.info(f'Active sessions: {len(rows)}')
51 cli.info(cli.text_table([r[1] for r in rows], header='auto'))
53 @gws.ext.command.cli('authSessrem')
54 def sessrem(self, p: RemoveParams):
55 """Remove authorization sessions."""
57 root = gws.config.load()
58 sm = root.app.authMgr.sessionMgr
60 n = 0
62 for s in sm.get_all():
63 du = dtx.total_difference(s.updated).seconds
64 if p.all:
65 sm.delete(s)
66 n += 1
67 continue
68 if p.older and du > p.older:
69 sm.delete(s)
70 n += 1
71 continue
72 if p.uid and s.uid in p.uid:
73 sm.delete(s)
74 n += 1
75 continue
77 cli.info('')
78 cli.info(f'Removed sessions: {n}')