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") || "";
|
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) {
|
function timingSafeEqual(a, b) {
|
||||||
const left = String(a);
|
const left = String(a);
|
||||||
const right = String(b);
|
const right = String(b);
|
||||||
@@ -172,7 +188,7 @@ async function listServices(kv) {
|
|||||||
|
|
||||||
async function updateService(request, url, kv, idFromPath) {
|
async function updateService(request, url, kv, idFromPath) {
|
||||||
const body = request.method === "GET" ? {} : await readBody(request);
|
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);
|
const result = serviceFromWebhook(idFromPath, query, body);
|
||||||
if (result.error) return json({ ok: false, error: result.error }, 400);
|
if (result.error) return json({ ok: false, error: result.error }, 400);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user