feat: добавлены функции для работы с пользовательскими rule-sets
Добавлены новые API-методы для получения и сохранения пользовательских rule-sets. Обновлены компоненты для работы с этими данными, включая интерфейс для добавления и удаления rule-sets. Refs: None
This commit is contained in:
@@ -309,6 +309,9 @@ function normalizeCustomRules(input) {
|
||||
networks: normalizeList(rule.networks).filter((network) =>
|
||||
["tcp", "udp"].includes(network),
|
||||
),
|
||||
ruleSets: normalizeList(rule.ruleSets).filter((tag) =>
|
||||
/^[a-z0-9][a-z0-9-]*$/i.test(tag),
|
||||
),
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -424,6 +427,28 @@ async function handleApi(req, res) {
|
||||
});
|
||||
}
|
||||
|
||||
if (req.method === "GET" && req.url === "/api/rule-sets") {
|
||||
return sendJson(res, 200, {
|
||||
success: true,
|
||||
ruleSets: readJson(settings.customRuleSetsPath, []),
|
||||
});
|
||||
}
|
||||
|
||||
if (req.method === "PUT" && req.url === "/api/rule-sets") {
|
||||
const body = await readBody(req);
|
||||
const rawSets = Array.isArray(body.ruleSets) ? body.ruleSets : [];
|
||||
const normalized = rawSets
|
||||
.filter((rs) => rs && rs.tag && rs.url)
|
||||
.map((rs) => ({
|
||||
tag: String(rs.tag).trim(),
|
||||
url: String(rs.url).trim(),
|
||||
format: rs.format === "source" ? "source" : "binary",
|
||||
}))
|
||||
.filter((rs) => /^[a-z0-9][a-z0-9-]*$/i.test(rs.tag));
|
||||
writeJson(settings.customRuleSetsPath, normalized);
|
||||
return sendJson(res, 200, { success: true, ruleSets: normalized });
|
||||
}
|
||||
|
||||
if (req.method === "POST" && req.url === "/api/route/check") {
|
||||
const body = await readBody(req);
|
||||
const host = String(body.host || "").trim();
|
||||
|
||||
Reference in New Issue
Block a user