Files
CLOAK/tools/verify_early_route_gate.php
2026-06-16 04:58:56 +08:00

83 lines
2.7 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 白名单 / 正品模式早期快速路径验证
* 输出 JSON{ok, checks: [...]}
*/
$root = dirname(__DIR__);
require_once $root . '/cong.php';
require_once $root . '/lib/bootstrap.php';
$checks = [];
function check_gate($name, $cond, $detail = '')
{
global $checks;
$checks[] = ['name' => $name, 'ok' => (bool) $cond, 'detail' => $detail];
}
function run_pipeline_fixture($root, $fixtureName)
{
$fixture = $root . '/tools/fixtures/' . $fixtureName;
$cmd = escapeshellarg(PHP_BINARY) . ' ' . escapeshellarg($root . '/tools/run_pipeline_fixture.php')
. ' ' . escapeshellarg($fixture) . ' 2>&1';
exec($cmd, $out, $code);
$json = json_decode(implode("\n", $out), true);
return is_array($json) ? $json : ['error' => implode("\n", $out), 'code' => $code];
}
// WhitelistGate(独立子进程,避免常量冲突)
$gateCmd = escapeshellarg(PHP_BINARY) . ' -r ' . escapeshellarg(
'define("SHOW_SITE_IP","8.8.8.8");define("WHITE_PARAMS","token=abc");define("WHITELIST_GROUP_ID",0);'
. 'require ' . var_export($root . '/lib/bootstrap.php', true) . ';'
. '$_GET=["token"=>"abc"];'
. 'echo json_encode(["ip"=>WhitelistGate::matchesWhitelistIp("8.8.8.8"),"param"=>WhitelistGate::matchesWhitelistParams()]);'
);
$gateJson = json_decode((string) shell_exec($gateCmd), true);
check_gate('WhitelistGate IP/参数', ($gateJson['ip'] ?? false) && ($gateJson['param'] ?? false));
$zp = run_pipeline_fixture($root, 'regression_zp.php');
check_gate(
'zp 模式仅记录国家并判定 false',
($zp['mode'] ?? '') === 'zp'
&& ($zp['result'] ?? null) === 'false'
&& ($zp['reason'] ?? '') === '正品模式',
json_encode($zp, JSON_UNESCAPED_UNICODE)
);
$wl = run_pipeline_fixture($root, 'regression_whitelist_fast.php');
check_gate(
'白名单快速路径判定 true',
($wl['result'] ?? null) === 'true',
json_encode($wl, JSON_UNESCAPED_UNICODE)
);
$zpWl = run_pipeline_fixture($root, 'regression_zp_whitelist.php');
check_gate(
'zp 模式下白名单仍判定 true',
($zpWl['mode'] ?? '') === 'zp'
&& ($zpWl['result'] ?? null) === 'true',
json_encode($zpWl, JSON_UNESCAPED_UNICODE)
);
$simOut = shell_exec(escapeshellarg(PHP_BINARY) . ' ' . escapeshellarg($root . '/tools/verify_simulation_zp_whitelist_route.php') . ' 2>/dev/null');
$simJson = null;
if (preg_match('/\{.*\}\s*$/s', (string) $simOut, $m)) {
$simJson = json_decode($m[0], true);
}
check_gate(
'SimulationRouteResolver zp+白名单走真实页',
($simJson['ok'] ?? false) === true,
(string) $simOut
);
$ok = true;
foreach ($checks as $c) {
if (!$c['ok']) {
$ok = false;
break;
}
}
echo json_encode(['ok' => $ok, 'checks' => $checks], JSON_UNESCAPED_UNICODE);