import { describe, expect, it } from
"vitest" ;
import {
buildNoVncDirectUrl,
buildNoVncObserverTokenUrl,
buildNoVncObserverTargetUrl,
consumeNoVncObserverToken,
generateNoVncPassword,
issueNoVncObserverToken,
resetNoVncObserverTokensForTests,
} from
"./novnc-auth.js" ;
const passwordKey = [
"pass" ,
"word" ].join(
"" );
describe(
"noVNC auth helpers" , () => {
it(
"builds the default observer URL without password" , () => {
expect(buildNoVncDirectUrl(
45678 )).toBe(
"http://127.0.0.1:45678/vnc.html ");
});
it(
"builds a fragment-based observer target URL with password" , () => {
const observerPassword =
"a+b c&d" ;
// pragma: allowlist secret
expect(buildNoVncObserverTargetUrl({ port:
45678 , [passwordKey]: observerPassword }))
.toBe(
"http://127.0.0.1:45678/vnc.html#autoconnect=1 &resize=remote&password=a%2Bb+c%26d",
);
});
it("issues one-time short-lived observer tokens" , () => {
resetNoVncObserverTokensForTests();
const token = issueNoVncObserverToken({
noVncPort: 50123 ,
[passwordKey]: "abcd1234" , // pragma: allowlist secret
nowMs: 1000 ,
ttlMs: 100 ,
});
expect(buildNoVncObserverTokenUrl("http://127.0.0.1:19999 ", token)).toBe(
`http://127.0.0.1:19999/sandbox/novnc?token=${token}`,
);
expect(consumeNoVncObserverToken(token, 1050 )).toEqual({
noVncPort: 50123 ,
[passwordKey]: "abcd1234" , // pragma: allowlist secret
});
expect(consumeNoVncObserverToken(token, 1050 )).toBeNull();
});
it("expires observer tokens" , () => {
resetNoVncObserverTokensForTests();
const token = issueNoVncObserverToken({
noVncPort: 50123 ,
password: "abcd1234" , // pragma: allowlist secret
nowMs: 1000 ,
ttlMs: 100 ,
});
expect(consumeNoVncObserverToken(token, 1200 )).toBeNull();
});
it("generates 8-char alphanumeric passwords" , () => {
const password = generateNoVncPassword();
expect(password).toMatch(/^[a-zA-Z0-9 ]{8 }$/);
});
});
Messung V0.5 in Prozent C=99 H=100 G=99
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland