export type NoVncObserverTokenPayload = {
noVncPort: number;
password?: string;
};
const NO_VNC_OBSERVER_TOKENS = new Map<string, NoVncObserverTokenEntry>();
function pruneExpiredNoVncObserverTokens(now: number) { for (const [token, entry] of NO_VNC_OBSERVER_TOKENS) { if (entry.expiresAt <= now) {
NO_VNC_OBSERVER_TOKENS.delete(token);
}
}
}
export function generateNoVncPassword() { // VNC auth uses an 8-char password max.
let out = ""; for (let i = 0; i < NOVNC_PASSWORD_LENGTH; i += 1) {
out += NOVNC_PASSWORD_ALPHABET[crypto.randomInt(0, NOVNC_PASSWORD_ALPHABET.length)];
} return out;
}
export function buildNoVncDirectUrl(port: number) { return `http://127.0.0.1:${port}/vnc.html`;
}
export function buildNoVncObserverTargetUrl(params: { port: number; password?: string }) { const query = new URLSearchParams({
autoconnect: "1",
resize: "remote",
}); if (params.password?.trim()) {
query.set("password", params.password);
} return `${buildNoVncDirectUrl(params.port)}#${query.toString()}`;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.