#!/bin/bash # kbdb-api-wall-guard 的 Bash 分支測試(inkstone/ISEP#30 群組) # # 這支補的是一個真的漏擋:hooks/kbdb-api-wall-guard.sh 的 Bash 分支原本引用 # hooks/kbdb_cmd_check.py(不存在的路徑),python3 找不到檔案就以非零結束, # 而呼叫端寫成 `... || echo "OK"` —— 於是這個分支永遠印 "OK",Bash 分支形同虛設, # 任何 `wrangler d1 execute` 直打 kbdb 都會被放行。修法:邏輯搬進 # hooks/lib/kbdb_cmd_check.py(新檔),並把 .sh 裡的參照路徑改過去。 # # 判準:真的用 wrangler 對 kbdb 這顆 D1 下 execute 要擋;只是提到(commit message、 # heredoc body、grep 搜尋)、或目標不是 kbdb 的 D1,都不准擋。 cd "$(dirname "$0")/.." || exit 1 H=hooks/kbdb-api-wall-guard.sh PASS=0; FAIL=0 run(){ # $1=want $2=cmd printf '%s' "{\"tool_name\":\"Bash\",\"tool_input\":{\"command\":$(python3 -c 'import json,sys;print(json.dumps(sys.argv[1]))' "$2")}}" \ | bash "$H" >/dev/null 2>&1 got=$? if [ "$got" = "$1" ]; then PASS=$((PASS+1)); printf ' ✅ '; else FAIL=$((FAIL+1)); printf ' ❌ '; fi printf 'want=%s got=%s %.72s\n' "$1" "$got" "$2" } w="wrangler"; sub="d1 execute"; db="arcrun-kbdb" echo "── 該擋:真的直打 kbdb 這顆 D1 執行 SQL ──" run 2 "$w $sub $db --remote --command \"SELECT 1\"" run 2 "npx $w $sub $db --command \"SELECT 1\"" run 2 "echo start && $w $sub $db --command \"SELECT 1\"" echo "── 不該擋:只是提到、heredoc body、目標不是 kbdb ──" run 0 "git commit -m \"ran $w $sub $db earlier, see ticket\"" run 0 "$(printf 'cat > note.md <<%sEOF%s\nwe should avoid %s %s %s\nEOF\n' "'" "'" "$w" "$sub" "$db")" run 0 "grep -rn \"$w $sub\" hooks/" run 0 "$w $sub some-other-db --command \"SELECT 1\"" run 0 "$w deploy --env stage" run 0 'echo hello world' run 0 "$w $sub $db --command \"SELECT 1\" kbdb-sql-ok" echo echo "$PASS/$((PASS+FAIL)) 通過" [ "$FAIL" -eq 0 ]