more admin stuff 2
This commit is contained in:
46
app/security/active_sessions.py
Normal file
46
app/security/active_sessions.py
Normal file
@ -0,0 +1,46 @@
|
||||
"""
|
||||
In-Memory-Registry der laufenden SSH/RDP-Sitzungen dieses Server-Prozesses.
|
||||
|
||||
Wird von app/ssh_proxy/terminal_ws.py und app/rdp_proxy/ws_tunnel.py beim
|
||||
Sitzungsstart befuellt (Referenz auf den eigenen asyncio.Task) und beim
|
||||
Sitzungsende wieder entfernt. Basis fuer die Superadmin-'Sessionview'
|
||||
(app/admin/routes.py: GET /admin/sessions, POST /admin/sessions/{id}/terminate)
|
||||
-- 'Beenden' funktioniert per asyncio.Task.cancel(), was den regulaeren
|
||||
finally-Cleanup-Pfad der jeweiligen WS-Route ausloest (DB-Update, Audit-
|
||||
Log-Eintrag, WebSocket schliessen), genau wie bei einem normalen Logout.
|
||||
|
||||
Bewusst rein prozesslokal (kein Redis/DB-Backing): bei einem einzelnen
|
||||
uvicorn-Worker (Standard-Deployment dieses Projekts, siehe ansible/) sieht
|
||||
und beendet jeder Superadmin-Request alle laufenden Sitzungen. Bei mehreren
|
||||
Worker-Prozessen sind nur die Sitzungen DIESES Workers 'killable' -- die
|
||||
Sessionview zeigt das ueber das 'killable'-Feld pro Sitzung an, statt einen
|
||||
Beenden-Versuch fehlschlagen zu lassen."""
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class ActiveSession:
|
||||
session_id: int
|
||||
task: asyncio.Task
|
||||
|
||||
|
||||
_active: dict[int, ActiveSession] = {}
|
||||
|
||||
|
||||
def register(session_id: int, task: asyncio.Task) -> None:
|
||||
_active[session_id] = ActiveSession(session_id=session_id, task=task)
|
||||
|
||||
|
||||
def unregister(session_id: int) -> None:
|
||||
_active.pop(session_id, None)
|
||||
|
||||
|
||||
def get(session_id: int) -> ActiveSession | None:
|
||||
return _active.get(session_id)
|
||||
|
||||
|
||||
def all_ids() -> set[int]:
|
||||
return set(_active.keys())
|
||||
Reference in New Issue
Block a user