Fix EdgeOne webhook query parsing
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user