mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-10 20:26:48 +00:00
feat(console): the serial console page on the panel's bar; a taken-over user learns by whom
The serial page had a white strip of inline styles with an untranslated status and a browser-default button above the terminal, sent input while disconnected, sized the terminal only on window load and resize, and left the keyboard elsewhere after the key menu. When a superuser opened a console open in another window, its user saw "[An administrator opened this console]" and a plain "disconnected". - console-xterm.html shares the VNC page's bar: status badge (Connecting, Connected, Disconnected, the server's refusal), Disconnect, then Reconnect (a new page for a new token). The script is static/js/console_serial.js; the token reaches it as json_script data. - The terminal takes the keyboard on connect and after the key menu; input is sent only while connected; it fits its box on connect and whenever the box changes size (ResizeObserver). - A console that writes nothing yet gets a dim local hint: press Enter. - socketiod sends the displaced client "taken_over" with the superuser's username; the page shows "Taken over by <name>" in the bar and the terminal. The superuser is not asked first (owner's decision). - Fullscreen uses the shared console_keys.js handler (keyboard lock).
This commit is contained in:
parent
0532471759
commit
2b54198965
7 changed files with 125 additions and 98 deletions
|
|
@ -75,6 +75,9 @@ def connect(sid, environ, auth):
|
|||
raise refused("Too many consoles are open on this server: try again later")
|
||||
if open_sid is not None: # a superuser takes over a console left open
|
||||
taken = open_sid, sessions.pop(open_sid)
|
||||
# the page tells its user who took the console; first, as its
|
||||
# forward ends the connection as soon as the worker is gone
|
||||
sio.emit("taken_over", {"by": user.username}, to=open_sid)
|
||||
# gone before the new worker starts: libvirt gives a console to one at a time
|
||||
end(taken[1], wait=True)
|
||||
pid, fd = pty.fork()
|
||||
|
|
@ -96,9 +99,7 @@ def connect(sid, environ, auth):
|
|||
logger.info("serial console of VM %s opened by %s%s", instance.name, user.username,
|
||||
" (taken over)" if taken else "")
|
||||
if taken:
|
||||
old_sid, _ = taken
|
||||
sio.emit("pty_output", {"output": "\r\n[An administrator opened this console]\r\n"}, to=old_sid)
|
||||
sio.disconnect(old_sid)
|
||||
sio.disconnect(taken[0])
|
||||
sio.start_background_task(forward, sid, session)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue