fix(byedpi): исправление валидации стратегий ByeDPI и сохранение в веб-интерфейсе LuCI

- Зарегистрирована команда validate_byedpi_strategy_json в command_spec CLI (/usr/bin/tachyon)
- Добавлена функция validate_byedpi_strategy_json и режим validate-byedpi-strategy-json в diagnostics/runtime.uc с вызовом providers/byedpi/validator.uc
- Исправлена ошибка 'Unexpected token U' в LuCI, из-за которой отменялось сохранение стратегии ByeDPI в UCI и сбрасывалось на дефолтное значение
- Добавлены тесты CLI-валидации стратегий в tests/byedpi_validator.sh
This commit is contained in:
Dushnilin
2026-09-06 09:33:02 +03:00
parent 385f989cd9
commit e9cf4744f3
3 changed files with 21 additions and 0 deletions
+1
View File
@@ -268,6 +268,7 @@ function command_spec(command) {
telegram_diagnose: [ "service/telegram.uc", "diagnose", 0 ],
validate_nfqws_strategy_json: [ "diagnostics/runtime.uc", "validate-nfqws-strategy-json", 1 ],
validate_nfqws2_strategy_json: [ "diagnostics/runtime.uc", "validate-nfqws2-strategy-json", 1 ],
validate_byedpi_strategy_json: [ "diagnostics/runtime.uc", "validate-byedpi-strategy-json", 1 ],
fuzzer_start: [ "diagnostics/fuzzer.uc", "start", 6 ],
fuzzer_status: [ "diagnostics/fuzzer.uc", "status", 0 ],
fuzzer_stop: [ "diagnostics/fuzzer.uc", "stop", 0 ],
@@ -60,6 +60,7 @@ const BYEDPI_RUNTIME_UC = LIB_DIR + "/providers/byedpi/runtime.uc";
const TAILSCALE_RUNTIME_UC = LIB_DIR + "/providers/tailscale/runtime.uc";
const ZAPRET_VALIDATOR_UC = LIB_DIR + "/providers/zapret/validator.uc";
const ZAPRET2_VALIDATOR_UC = LIB_DIR + "/providers/zapret2/validator.uc";
const BYEDPI_VALIDATOR_UC = LIB_DIR + "/providers/byedpi/validator.uc";
let as_string = common.as_string;
let shell_quote = common.shell_quote;
@@ -1346,6 +1347,15 @@ function validate_nfqws2_strategy_json(raw_opt) {
return 0;
}
function validate_byedpi_strategy_json(raw_opt) {
let result = module_capture(BYEDPI_VALIDATOR_UC, [ "validate-json", as_string(raw_opt) ]);
if (result.output != "")
print(result.output);
else
print("{\"valid\":false,\"message\":\"ByeDPI validator produced no output\"}\n");
return 0;
}
function url_host(value) {
return helper_output("url-get-host", [ value ]);
}
@@ -5012,6 +5022,8 @@ else if (mode == "validate-nfqws-strategy-json")
exit(validate_nfqws_strategy_json(ARGV[1] || ""));
else if (mode == "validate-nfqws2-strategy-json")
exit(validate_nfqws2_strategy_json(ARGV[1] || ""));
else if (mode == "validate-byedpi-strategy-json")
exit(validate_byedpi_strategy_json(ARGV[1] || ""));
else {
warn("Usage: diagnostics/runtime.uc <operation> ...\n");
exit(1);
+8
View File
@@ -76,4 +76,12 @@ UCODE
ucode -L "$TACHYON_LIB" "$WORK_DIR/require-byedpi-validator.uc"
TACHYON_BIN="$ROOT_DIR/tachyon/files/usr/bin/tachyon"
cli_valid_json="$(TACHYON_LIB="$TACHYON_LIB" ucode "$TACHYON_BIN" validate_byedpi_strategy_json '--disorder 3 --fake-sni example.org -N')"
assert_json_field "$cli_valid_json" valid true
cli_invalid_json="$(TACHYON_LIB="$TACHYON_LIB" ucode "$TACHYON_BIN" validate_byedpi_strategy_json '--port 1080 --disorder 3')"
assert_json_field "$cli_invalid_json" valid false
assert_json_field "$cli_invalid_json" needle --port
printf 'ByeDPI validator checks passed\n'