import json import time from datetime import datetime, timezone import config_utils import factory def _fmt_ts(ts): try: dt = datetime.fromtimestamp(int(ts), tz=timezone.utc) return dt.strftime('%Y-%m-%d %H:%M UTC') except Exception: return '-' def _active_sessions_table(): rows = config_utils.get_active_sessions() no_data = '

No active sessions.

' if not rows: return no_data now = int(time.time()) trs = '' for email, access_level, logged_in_at, last_seen in rows: ago = config_utils.relative_time(int(last_seen), now) trs += ( f'' f'{factory.e(email)}' f'{factory.e(access_level)}' f'{_fmt_ts(logged_in_at)}' f'{factory.e(ago)} ago' f'' ) return ( '' '' '' '' '' '' + trs + '
EmailAccess LevelLogged InLast Seen
' ) def collect_tokens(cfg): tokens = config_utils.collect_layout_tokens(cfg) tokens['ACCOUNT_LEVEL_OPTIONS'] = json.dumps([ {'value': 'viewer', 'label': 'Viewer (read-only access to live data)'}, {'value': 'administrator', 'label': 'Administrator (can modify configuration)'}, {'value': 'manager', 'label': 'Manager (full access including account management)'}, ]) tokens['ACTIVE_SESSIONS_TABLE'] = _active_sessions_table() content = factory.load_json(f'{factory.PAGES_DIR}/accountmanage/content.json') for table_item in factory.iter_table_items(content.get('items', [])): ds = table_item.get('datasource', '') tokens[factory.table_token_key(ds)] = factory.build_table(table_item, tokens, config_utils.load_datasource(ds)) return tokens