Files
Genarrative/scripts/check-pingora-direct-live-guard.mjs
T
kdletters 75b85ee5a9 修正 Pingora 高端口重定向验收
direct live 支持独立 redirect base URL 预期

release readiness 和切换证据链透传 redirect base URL

直连启用脚本透传高端口 rehearsal 参数

补充 direct live guard、运维门禁和文档示例
2026-06-17 23:00:28 +08:00

146 lines
3.7 KiB
JavaScript

#!/usr/bin/env node
import { spawnSync } from 'node:child_process';
import { mkdtempSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import path from 'node:path';
const DIRECT_LIVE_SCRIPT = 'scripts/check-pingora-direct-live.mjs';
const failures = [];
const tmpRoot = mkdtempSync(
path.join(tmpdir(), 'genarrative-pingora-direct-live-guard-'),
);
try {
main();
} finally {
rmSync(tmpRoot, { recursive: true, force: true });
}
if (failures.length > 0) {
console.error('[check:pingora-direct-live-guard] FAILED');
for (const failure of failures) {
console.error(`- ${failure}`);
}
process.exit(1);
}
console.log('[check:pingora-direct-live-guard] OK');
function main() {
assertRejectsControlCharacter('--https-base-url', [
'--https-base-url',
'https://127.0.0.1\n--fake-flag',
]);
assertRejectsControlCharacter('--http-base-url', [
'--https-base-url',
'https://127.0.0.1',
'--http-base-url',
'http://127.0.0.1\r--fake-flag',
]);
assertRejectsControlCharacter('--host', [
'--https-base-url',
'https://127.0.0.1',
'--host',
'example.com\nX-Injected: yes',
]);
assertRejectsControlCharacter('--redirect-host', [
'--https-base-url',
'https://127.0.0.1',
'--redirect-host',
'example.com\nhidden',
]);
assertRejectsControlCharacter('--redirect-base-url', [
'--https-base-url',
'https://127.0.0.1',
'--redirect-base-url',
'https://example.com\nhidden',
]);
assertRejectsInvalidRedirectBaseUrl();
assertRejectsControlCharacter('--probe-token', [
'--https-base-url',
'https://127.0.0.1',
'--probe-token',
'probe\nX-Injected: yes',
'--skip-wss',
]);
assertRejectsControlCharacter('--path', [
'--https-base-url',
'https://127.0.0.1',
'--path',
'/api/health\nX-Injected: yes',
'--skip-wss',
]);
assertRejectsControlCharacter('--pingora-access-log', [
'--https-base-url',
'https://127.0.0.1',
'--pingora-access-log',
`${path.join(tmpRoot, 'pingora.access.log')}\n--fake-flag`,
'--skip-wss',
]);
assertRejectsControlCharacter('--spacetime-database', [
'--https-base-url',
'https://127.0.0.1',
'--spacetime-database',
'genarrative\nprod',
'--skip-wss',
]);
assertRejectsControlCharacter('--timeout-ms', [
'--https-base-url',
'https://127.0.0.1',
'--timeout-ms',
'5000\n1',
'--skip-wss',
]);
}
function assertRejectsInvalidRedirectBaseUrl() {
const result = spawnSync(
'node',
[
DIRECT_LIVE_SCRIPT,
'--https-base-url',
'https://127.0.0.1',
'--redirect-base-url',
'http://example.com',
],
{
cwd: process.cwd(),
encoding: 'utf8',
env: process.env,
},
);
if ((result.status ?? 0) === 0) {
failures.push('--redirect-base-url 必须拒绝非 HTTPS base URL。');
return;
}
assertIncludes(
`${result.stdout}\n${result.stderr}`,
'--redirect-base-url 必须使用 https://',
'--redirect-base-url 非 HTTPS 时必须给出明确错误。',
);
}
function assertRejectsControlCharacter(label, args) {
const result = spawnSync('node', [DIRECT_LIVE_SCRIPT, ...args], {
cwd: process.cwd(),
encoding: 'utf8',
env: process.env,
});
if ((result.status ?? 0) === 0) {
failures.push(`${label} 带控制字符时必须在发起 live 请求前失败。`);
return;
}
assertIncludes(
`${result.stdout}\n${result.stderr}`,
`${label} 不能包含换行或 NUL 字符`,
`${label} 带控制字符时必须给出明确错误。`,
);
}
function assertIncludes(value, expected, reason) {
if (!String(value).includes(expected)) {
failures.push(`${reason} 缺少: ${expected}`);
}
}