README: Web-Oberflaeche vollstaendig dokumentiert; "pvesnap-web <vmid>"
Der Abschnitt zur Web-Oberflaeche beschreibt jetzt beides ausfuehrlich: die Einrichtung als Dienst ueber install.sh --with-webexplorer --port (mit Beispielen fuer eigene Adresse und --no-start), das Nachtraegliche Aendern ueber /etc/pvesnap/web.conf und die ueblichen systemctl-Befehle - sowie den Start von Hand mit einer Tabelle aller Parameter und Beispielen fuer die typischen Faelle: SSH-Tunnel, Backup-Team mit VM.Backup statt VM.Snapshot, einzelner Dienstleister ueber --allow-user, Zugangsschluessel statt Anmeldung, freies Verzeichnis, Aufraeumen. Der Explorer hat ebenfalls eine Parametertabelle bekommen. Dabei fiel auf, dass "pvesnap-web <vmid>" ohne Snapshot-Namen bisher gar nichts bewirkte - man bekam trotzdem die vollstaendige Gastliste. Jetzt schraenkt die Angabe die Oberflaeche wirklich auf diesen Gast ein, und zwar auch gegen Aufrufe ueber die Adresszeile. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3acbebce6f
commit
ab610a1f5a
@@ -85,13 +85,16 @@ class AppState:
|
||||
"""Was gerade geoeffnet ist. Es ist immer hoechstens ein Snapshot offen."""
|
||||
|
||||
def __init__(self, token="", proxmox=None, fixed_path="", auth_mode="token",
|
||||
privilege=DEFAULT_PRIVILEGE, allowed_users=()):
|
||||
privilege=DEFAULT_PRIVILEGE, allowed_users=(), only_vmid=None):
|
||||
self.token = token
|
||||
self.proxmox = proxmox
|
||||
self.fixed_path = fixed_path
|
||||
self.auth_mode = auth_mode # pve | token | none
|
||||
self.privilege = privilege
|
||||
self.allowed_users = tuple(allowed_users or ())
|
||||
# Wurde beim Start eine VMID angegeben, gibt es auch nur diesen Gast -
|
||||
# weder in der Liste noch ueber die Adresszeile.
|
||||
self.only_vmid = only_vmid
|
||||
self.sessions = Sessions()
|
||||
self.session = None
|
||||
self.guest = None
|
||||
@@ -107,6 +110,8 @@ class AppState:
|
||||
def visible_guests(self, userid):
|
||||
"""Nur die Gaeste, in die dieser Benutzer hineinsehen darf."""
|
||||
guests = self.proxmox.inventory(refresh=True)
|
||||
if self.only_vmid:
|
||||
guests = [g for g in guests if g.vmid == self.only_vmid]
|
||||
if self.auth_mode != "pve":
|
||||
return guests
|
||||
tree = permissions(userid)
|
||||
@@ -114,6 +119,8 @@ class AppState:
|
||||
if may_access(userid, g, self.privilege, tree, self.allowed_users)]
|
||||
|
||||
def may_open(self, userid, guest):
|
||||
if self.only_vmid and guest.vmid != self.only_vmid:
|
||||
return False
|
||||
if self.auth_mode != "pve":
|
||||
return True
|
||||
return may_access(userid, guest, self.privilege, None, self.allowed_users)
|
||||
@@ -905,7 +912,7 @@ def main(argv=None):
|
||||
token = (args.token or secrets.token_urlsafe(18)) if mode == "token" else ""
|
||||
state = AppState(token=token, proxmox=proxmox, fixed_path=args.path or "",
|
||||
auth_mode=mode, privilege=args.require_privilege,
|
||||
allowed_users=args.allow_user)
|
||||
allowed_users=args.allow_user, only_vmid=args.vmid)
|
||||
|
||||
if args.vmid and args.snapshot and proxmox:
|
||||
guest = next((g for g in proxmox.inventory() if g.vmid == args.vmid), None)
|
||||
|
||||
Reference in New Issue
Block a user