This commit is contained in:
Mateusz Gruszczyński committed 2026-10-20 23:13:39 +02:00
1 parent 52e7ce7b46
commit 3776edf4fc
5 files changed
+226 -109

No files matched your search

+11 -23
View File
@@ -335,36 +335,24 @@
const compressionEnabled = input("", "checkbox", "docker-compression-enabled"); compressionEnabled.checked = assignment?.compression_enabled !== false; const compressionField = checkboxField("dockerCompression", compressionEnabled); compressionField.title = t("dockerCompressionHelp");
const switches = el("div", undefined, "docker-switch-row"); switches.append(preserveLabel, forceSslField, websocketField, cacheField, compressionField, transformField);
const certMismatch = input("", "checkbox", "docker-cert-mismatch"); certMismatch.checked = assignment?.allow_certificate_mismatch === true;
const mismatchField = checkboxField("dockerCertMismatchForce", certMismatch);
const mismatchHelp = el("p", t("dockerCertMismatchWarning"), "fine acl-stack-warning");
const mismatchUnavailable = el("p", t("dockerCertMismatchUnavailable"), "fine");
const riskPill = el("span", t("dockerCertMismatchRisk"), "acl-picker-policy is-deny docker-cert-risk-pill");
const syncMismatch = () => {
certMismatch.disabled = !agent.certificate_id;
if (!agent.certificate_id) certMismatch.checked = false;
mismatchHelp.hidden = !certMismatch.checked;
mismatchUnavailable.hidden = !!agent.certificate_id;
riskPill.hidden = !certMismatch.checked;
};
certMismatch.addEventListener("change", syncMismatch);
mismatchField.append(mismatchHelp, mismatchUnavailable);
certMismatch.disabled = !agent.certificate_id;
if (certMismatch.disabled) certMismatch.checked = false;
const mismatchLabel = el("label", undefined, "check");
mismatchLabel.append(certMismatch, el("span", t("dockerCertMismatchForce")));
mismatchLabel.title = t(certMismatch.disabled ? "dockerCertMismatchUnavailable" : "dockerCertMismatchWarning");
const certificateBar = el("div", undefined, "docker-service-certificate-bar");
const tlsControl = el("div", undefined, "docker-service-certificate-control");
const tlsHeading = el("div", undefined, "docker-service-certificate-title");
tlsHeading.append(el("strong", t("dockerCertSection")), riskPill);
tlsControl.append(tlsHeading, mismatchField); certificateBar.append(tlsControl);
syncMismatch();
certificateBar.append(mismatchLabel);
const h2Enabled = input("", "checkbox", "docker-http2-enabled"); h2Enabled.checked = assignment?.http2_enabled !== false;
const h3Enabled = input("", "checkbox", "docker-http3-enabled"); h3Enabled.checked = assignment?.http3_enabled !== false;
const protocolBox = el("section", undefined, "docker-protocol-panel");
const protocolHeading = el("div", undefined, "docker-protocol-heading");
protocolHeading.append(el("strong", t("dockerFrontendProtocols")), el("small", t("dockerFrontendProtocolsHelp"), "fine"));
// New publications default to H3 off; legacy assignments keep their saved behavior.
const h3Enabled = input("", "checkbox", "docker-http3-enabled"); h3Enabled.checked = assignment ? assignment.http3_enabled !== false : false;
const protocolBox = el("details", undefined, "docker-protocol-editor"), protocolSummary = el("summary");
protocolSummary.append(el("span", t("dockerFrontendProtocols")), el("small", t("dockerFrontendProtocolsHelp"), "fine"));
const protocolOptions = el("div", undefined, "docker-protocol-options");
const h1 = el("span", undefined, "docker-protocol-fixed");
h1.append(el("strong", "HTTP/1.1"), el("small", t("dockerHttp1Always"), "fine"));
protocolOptions.append(h1, checkboxField("dockerHttp2Enabled", h2Enabled), checkboxField("dockerHttp3Enabled", h3Enabled));
protocolBox.append(protocolHeading, protocolOptions);
protocolBox.append(protocolSummary, protocolOptions);
route.append(labeled("dockerHostname", host, t("dockerHostnameHelp").replace("{domain}", agent.base_domain)), aliases.node, labeled("dockerBackendIp", target), labeled("dockerBackendScheme", scheme), switches);
editor.append(certificateBar, route, protocolBox, aclEditor(assignment, agent), timeoutEditor(assignment), healthEditor(assignment), passiveHealthEditor(assignment));
const actions = el("div", undefined, "docker-service-actions"), apply = el("button", t("dockerApplyService"), "outline docker-apply"); apply.type = "button"; apply.disabled = !publish.checked; apply.addEventListener("click", async () => { apply.disabled = true; try { await saveAssignment(agent.id, row, true); } catch (error) { toast(error.message, true); } finally { if (row.isConnected) apply.disabled = !publish.checked; } }); actions.append(apply); editor.append(actions); row.append(editor);