路线图 §七 序 7「源码真机常量注入化」的脱敏部分。 ## 改了什么 - apps/agent/src/capabilities/network.ts:注释里的真机机器名 → 泛化为「机器名+纯数字」 (保留"为什么不能拼 USERDOMAIN/USERNAME"这个教训本身,去掉具体机器名) - scripts/rescue-network.ps1:.EXAMPLE 里的真机内网地址 → 文档示例段 192.168.1.100; 网卡名示例由中文默认名改为 'Ethernet'(既避免像真机、又更通用) - packages/protocol/src/acl.ts:注释里的真机 Mac 地址 → 192.168.1.100 - tests/unit×4:测试数据里的真机 IP 统一换成 192.168.1.x 示例段 ## 过程中的两个教训(都记在代码注释里了) 1. **正则转义形态漏替换**:断言里写的是 `192\.168\.0\.88`(转义点),第一轮只替换了 裸形态 `192.168.0.`,导致脚本值变了、断言没变 → 3 个测试红。 2. **机械替换会破坏「跨网段」这类语义测试**:acl 的 `/24 网段匹配` 用例里有一条 本意是「**不同网段不匹配**」,替换后两侧变成同段 → 断言必红。已改回不同网段 并在注释里标注原因,防止下次再被批量替换破坏。 ## 验证 单测 269 全绿(复跑);e2e 30 全绿。
42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { computeHmac, verifyHmac } from '../../packages/protocol/dist/index.js';
|
|
|
|
/**
|
|
* v22:发现广播的详情签名。
|
|
* 被控端与控制端必须**逐字节同构**,否则「🔒 已认证」永远不亮 —— 故这里做往返一致性测试。
|
|
*/
|
|
const detail = {
|
|
host: '192.168.1.21',
|
|
port: 8765,
|
|
tls: true,
|
|
auth_mode: 'psk',
|
|
input_enabled: false,
|
|
cert_sha256: null,
|
|
platform: 'win32',
|
|
};
|
|
const nodeId = 'win_01';
|
|
const ts = 1790000000000;
|
|
const SECRET = 'S3CRET-DISCOVERY-KEY';
|
|
|
|
test('详情签名:同一输入两端算出同一值并验签通过', () => {
|
|
const payload = `${nodeId}|${ts}|${JSON.stringify(detail)}`;
|
|
const sig = computeHmac(SECRET, payload);
|
|
assert.ok(verifyHmac(SECRET, payload, sig), '控制端应验签通过');
|
|
});
|
|
|
|
test('详情签名:错误密钥 / 篡改详情 / 改时间戳 都必须验签失败', () => {
|
|
const payload = `${nodeId}|${ts}|${JSON.stringify(detail)}`;
|
|
const sig = computeHmac(SECRET, payload);
|
|
assert.ok(!verifyHmac('wrong-key', payload, sig), '错误密钥应失败');
|
|
const tampered = `${nodeId}|${ts}|${JSON.stringify({ ...detail, port: 9999 })}`;
|
|
assert.ok(!verifyHmac(SECRET, tampered, sig), '篡改详情应失败');
|
|
assert.ok(!verifyHmac(SECRET, `${nodeId}|${ts + 1}|${JSON.stringify(detail)}`, sig), '改时间戳应失败');
|
|
});
|
|
|
|
test('详情签名:字段顺序变化会改变签名(提醒:两侧都按对象字面量顺序拼)', () => {
|
|
const a = computeHmac(SECRET, JSON.stringify({ x: 1, y: 2 }));
|
|
const b = computeHmac(SECRET, JSON.stringify({ y: 2, x: 1 }));
|
|
assert.notEqual(a, b);
|
|
});
|