agent-exec transport 41538d22ba2a4e9bf86b9719a1257461/4985036a61a6
This commit is contained in:
@@ -24,8 +24,9 @@ Dev 侧 Backend/Documents/Frontend/UI 的 gitlink 由本仓 `modules/` 固定,
|
||||
- `SVC_RDM_SRC_DIR`:RDM 检出,位于 `rdm_sha`,submodule 已递归物化。
|
||||
- `KB_SRC_DIR`:KB-Regulations 检出,位于 `kb_sha`,submodule 已物化。
|
||||
- Go 与 Node(RDM 测试及客户端制品构建所需)。
|
||||
- 客户端制品扫描需要已构建的 RDM 产物(RDM 检出的 `bin/`、`.build/product/frontend/dist`),
|
||||
或用 `REGKB_SCAN_DIRS` 指定待扫目录(空格分隔)。
|
||||
- 客户端制品扫描需要已构建的 RDM 产品前端制品(RDM 检出的 `.build/product/frontend/dist`),
|
||||
或用 `REGKB_SCAN_DIRS` 指定待扫目录(空格分隔)。服务端二进制 `bin/` 不是客户端制品,
|
||||
且携带 `KBREG_*` 变量名,因此不扫描。
|
||||
|
||||
## 用法
|
||||
|
||||
@@ -43,7 +44,7 @@ KBREG_TEST_DATABASE_URL=... SVC_RDM_SRC_DIR=/path/to/rdm KB_SRC_DIR=/path/to/kb
|
||||
|---|---|---|
|
||||
| `kb-test-pg` | `make -C "$KB_SRC_DIR" test-pg` | provider 组合链;dump/restore 后重建索引仍保持语料修订哈希与历史引用解析;provider/解析器不可用;凭据注入、轮换与撤销 |
|
||||
| `rdm-kbreg` | `GOWORK=off go test -count=1 ./plugins/kbreg/...`,以及 `-run 'Composed\|RegCite\|Citation\|RegCheck\|RegBatch\|RegAudit'` 覆盖 `./internal/rdmapp/...`、`./plugins/rdm/...` | 完整法规问答的双通道记录、条款引用与审计批次重放;缺一通道时报告降级而非双源通过;保密词留在本地;凭据不进入输出;审计封印校验 |
|
||||
| `client-asset-secret-scan` | 扫描 `REGKB_SCAN_DIRS`(缺省为 RDM 的 `bin/` 与 `.build/product/frontend/dist`) | 凭据不出现在客户端制品:任何文件含字符串 `KBREG_`,或含环境中非空 `KBREG_*KEY*`、`KBREG_*TOKEN*`、`KBREG_DATABASE_URL` 的值即失败;只打印文件路径与变量名。没有可扫目录时失败 |
|
||||
| `client-asset-secret-scan` | 扫描 `REGKB_SCAN_DIRS`(缺省仅为 RDM 产品前端制品 `.build/product/frontend/dist`;服务端二进制 `bin/` 不是客户端制品,携带 `KBREG_*` 变量名,不扫描) | 凭据不出现在客户端制品:任何文件含字符串 `KBREG_`,或含环境中非空 `KBREG_*KEY*`、`KBREG_*TOKEN*`、`KBREG_DATABASE_URL` 的值即失败;只打印文件路径与变量名。没有可扫目录时失败 |
|
||||
|
||||
跨项目与受限来源的拒绝/脱敏场景归入 `rdm-kbreg` 阶段所选的 RDM 命令总线测试;具体用例以固定 RDM 修订中的测试为准。
|
||||
|
||||
|
||||
@@ -85,12 +85,12 @@ stage_scan() {
|
||||
if [ -n "${REGKB_SCAN_DIRS:-}" ]; then
|
||||
read -r -a dirs <<< "$REGKB_SCAN_DIRS"
|
||||
else
|
||||
for d in "$rdm_dir/bin" "$rdm_dir/.build/product/frontend/dist"; do
|
||||
for d in "$rdm_dir/.build/product/frontend/dist"; do
|
||||
[ -d "$d" ] && dirs+=("$d")
|
||||
done
|
||||
fi
|
||||
if [ "${#dirs[@]}" -eq 0 ]; then
|
||||
echo "scan: 没有可扫描的客户端制品目录(先构建 RDM 产品,或设置 REGKB_SCAN_DIRS)" >&2
|
||||
echo "scan: 没有可扫描的客户端制品目录(先构建 RDM 产品以生成 .build/product/frontend/dist,或设置 REGKB_SCAN_DIRS)" >&2
|
||||
return 1
|
||||
fi
|
||||
local secret_vars=() name
|
||||
|
||||
@@ -97,6 +97,24 @@ class RegulationsKbPinTests(unittest.TestCase):
|
||||
self.assertNotIn("=== stage", proc.stdout)
|
||||
self.assertNotIn("/nonexistent-fake", proc.stdout + proc.stderr)
|
||||
|
||||
def test_scan_default_excludes_server_bin(self):
|
||||
text = RUN.read_text()
|
||||
loops = [ln.strip() for ln in text.splitlines() if ln.strip().startswith('for d in "$rdm_dir/')]
|
||||
self.assertEqual(len(loops), 1)
|
||||
self.assertIn('"$rdm_dir/.build/product/frontend/dist"', loops[0])
|
||||
self.assertNotIn('"$rdm_dir/bin"', text)
|
||||
|
||||
with tempfile.TemporaryDirectory() as rdm_dir:
|
||||
Path(rdm_dir, "bin").mkdir()
|
||||
Path(rdm_dir, "bin", "rdm").write_text("KBREG_DATABASE_URL\n")
|
||||
script = 'dirs=(); ' + loops[0] + ' [ -d "$d" ] && dirs+=("$d"); done; printf "%s\\n" "${dirs[@]}"'
|
||||
proc = subprocess.run(
|
||||
["bash", "-c", script], env={"PATH": os.environ.get("PATH", "/usr/bin:/bin"), "rdm_dir": rdm_dir},
|
||||
capture_output=True, text=True, timeout=10,
|
||||
)
|
||||
self.assertEqual(proc.returncode, 0, proc.stderr)
|
||||
self.assertEqual(proc.stdout.strip(), "")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user