Fix EdgeOne webhook query parsing

This commit is contained in:
zeer
2026-07-12 17:01:20 +08:00
parent 8570eb84da
commit a42f2234d4

View File

@@ -79,6 +79,22 @@ function getRequestToken(request, url) {
return request.headers.get("x-webhook-token") || url.searchParams.get("token") || "";
}
function queryToObject(search = "") {
const query = {};
const raw = String(search || "").replace(/^\?/, "");
if (!raw) return query;
for (const pair of raw.split("&")) {
if (!pair) continue;
const [key, ...valueParts] = pair.split("=");
const name = decodeURIComponent(key.replace(/\+/g, " "));
const value = decodeURIComponent(valueParts.join("=").replace(/\+/g, " "));
query[name] = value;
}
return query;
}
function timingSafeEqual(a, b) {
const left = String(a);
const right = String(b);
@@ -172,7 +188,7 @@ async function listServices(kv) {
async function updateService(request, url, kv, idFromPath) {
const body = request.method === "GET" ? {} : await readBody(request);
const query = Object.fromEntries(url.searchParams);
const query = queryToObject(url.search);
const result = serviceFromWebhook(idFromPath, query, body);
if (result.error) return json({ ok: false, error: result.error }, 400);