19 lines
1.4 KiB
JavaScript
19 lines
1.4 KiB
JavaScript
"use strict";
|
|
// Per-vhost rate limit editors, shared in the bundled vhost closure.
|
|
function userAgentRateEditor(parent, values = []) {
|
|
parent.append(text("h3", "vhUaRateTitle", "subheading vh-wide"));
|
|
const rows = el("div", undefined, "vh-wide vh-ua-rates"); parent.append(rows);
|
|
const add = (value = {}) => {
|
|
if (rows.children.length >= 64) { toast(t("vhUaRateMax"), true); return; }
|
|
const row = el("div", undefined, "vh-row vh-grid");
|
|
field(row, "ua-rate-pattern", "vhUaRatePattern", value.pattern || "", "text", { required: true, maxLength: 256 });
|
|
field(row, "ua-rate-requests", "vhRateRequests", value.requests ?? 120, "number", { required: true, min: 1, max: 1000000 });
|
|
field(row, "ua-rate-window", "vhRateWindow", value.window_seconds ?? 60, "number", { required: true, min: 1, max: 3600 });
|
|
field(row, "ua-rate-burst", "vhRateBurst", value.burst ?? 0, "number", { required: true, min: 0, max: 1000000 });
|
|
row.append(button("remove", () => { row.remove(); changed(); })); rows.append(row);
|
|
};
|
|
for (const value of values) add(value);
|
|
parent.append(button("vhAddUaRate", () => { add(); changed(); })); note(parent, "vhUaRateHelp");
|
|
return () => [...rows.children].map(row => ({ pattern: str("ua-rate-pattern", row).trim(), requests: num("ua-rate-requests", row), window_seconds: num("ua-rate-window", row), burst: num("ua-rate-burst", row) }));
|
|
}
|