ken_nogi/NodeSrv/apps/lineworks-user-auth/test/adminAuth.test.js
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。
NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは
別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter
インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 15:37:06 +09:00

48 lines
2.2 KiB
JavaScript

const { test } = require("node:test");
const assert = require("node:assert");
const { verifyMasterKey, createSessionToken, createTempKey, verifySessionToken, buildSessionCookieHeader, parseCookies, SESSION_COOKIE_NAME } = require("../src/adminAuth");
test("verifyMasterKey returns true only for the exact configured key", () => {
assert.strictEqual(verifyMasterKey("correct", "correct"), true);
assert.strictEqual(verifyMasterKey("wrong", "correct"), false);
});
test("createSessionToken then verifySessionToken succeeds within TTL", () => {
const now = new Date("2026-08-24T00:00:00.000Z").getTime();
const token = createSessionToken("secret", now);
assert.strictEqual(verifySessionToken(token, "secret", now + 1000), true);
});
test("verifySessionToken fails after the session TTL has elapsed", () => {
const now = new Date("2026-08-24T00:00:00.000Z").getTime();
const token = createSessionToken("secret", now);
assert.strictEqual(verifySessionToken(token, "secret", now + 25 * 60 * 60 * 1000), false);
});
test("createTempKey then verifySessionToken succeeds within the 60-minute temp TTL", () => {
const now = new Date("2026-08-24T00:00:00.000Z").getTime();
const token = createTempKey("secret", now);
assert.strictEqual(verifySessionToken(token, "secret", now + 59 * 60 * 1000), true);
});
test("verifySessionToken rejects a temp key after 60 minutes have elapsed", () => {
const now = new Date("2026-08-24T00:00:00.000Z").getTime();
const token = createTempKey("secret", now);
assert.strictEqual(verifySessionToken(token, "secret", now + 61 * 60 * 1000), false);
});
test("buildSessionCookieHeader scopes the cookie to /auth", () => {
const header = buildSessionCookieHeader("tok");
assert.ok(header.includes("Path=/auth"));
assert.ok(header.startsWith(`${SESSION_COOKIE_NAME}=`));
});
test("buildSessionCookieHeader supports a custom Max-Age (for temp keys)", () => {
const header = buildSessionCookieHeader("tok", 3600 * 1000);
assert.ok(header.includes("Max-Age=3600"));
});
test("parseCookies parses a raw Cookie header into a key-value map", () => {
assert.deepStrictEqual(parseCookies(`${SESSION_COOKIE_NAME}=abc; other=1`), { [SESSION_COOKIE_NAME]: "abc", other: "1" });
});