This commit is contained in:
Mateusz Gruszczyński committed 2026-10-11 22:55:22 +02:00
1 parent 4cc994b3bc
commit 79fd198949
48 files changed
+922 -202

No files matched your search

+73 -49
View File
@@ -1766,16 +1766,14 @@
id="settings-tab-connections" role="tab" tabindex="-1" type="button"></button><button
aria-controls="settings-page-docker-agents" aria-selected="false" data-i18n="dockerAgents"
data-settings-tab="docker-agents" id="settings-tab-docker-agents" role="tab" tabindex="-1"
type="button"></button><button aria-controls="settings-page-response" aria-selected="false"
data-i18n="responseSettings" data-settings-tab="response" id="settings-tab-response"
role="tab" tabindex="-1" type="button"></button><button aria-controls="settings-page-cache"
type="button"></button><button aria-controls="settings-page-policies" aria-selected="false" data-i18n="policyRulesTitle"
data-settings-tab="policies" id="settings-tab-policies" role="tab" tabindex="-1"
type="button">Rules & headers</button><button aria-controls="settings-page-cache"
aria-selected="false" data-i18n="cacheSettings" data-settings-tab="cache"
id="settings-tab-cache" role="tab" tabindex="-1" type="button"></button><button
aria-controls="settings-page-transform" aria-selected="false" data-i18n="transformSettings"
data-settings-tab="transform" id="settings-tab-transform" role="tab" tabindex="-1"
type="button"></button><button aria-controls="settings-page-headers" aria-selected="false"
data-i18n="customHeaders" data-settings-tab="headers" id="settings-tab-headers" role="tab"
tabindex="-1" type="button"></button><button aria-controls="settings-page-forwarding"
type="button"></button><button aria-controls="settings-page-forwarding"
aria-selected="false" data-i18n="forwardingSettings" data-settings-tab="forwarding"
id="settings-tab-forwarding" role="tab" tabindex="-1" type="button"></button><button
aria-controls="settings-page-pages" aria-selected="false" data-i18n="globalPages"
@@ -2065,8 +2063,55 @@
type="submit">Save and connect agents</button></div>
</form>
</div>
<div aria-labelledby="settings-tab-response" class="settings-page" data-settings-page="response"
hidden="" id="settings-page-response" role="tabpanel">
<section aria-labelledby="settings-tab-policies" class="settings-page"
data-settings-page="policies" hidden="" id="settings-page-policies" role="tabpanel">
<div class="card edit-form">
<div class="card-heading"><h2 data-i18n="policyRulesTitle">Rules & headers</h2><span class="pill live" data-i18n="hotApply">LIVE APPLY</span></div>
<nav aria-label="Rules and headers" class="settings-tabs sub-tabs" id="policy-settings-tabs" role="tablist">
<button aria-selected="true" data-policy-settings-tab="user-agent" data-i18n="globalUaBlockingTitle" type="button">Global User-Agent blocklist</button>
<button aria-selected="false" data-policy-settings-tab="headers" data-i18n="customHeaders" type="button">Global custom headers</button>
<button aria-selected="false" data-policy-settings-tab="response" data-i18n="responseSettings" type="button">Client response</button>
</nav>
</div>
<div data-policy-settings-page="user-agent">
<article class="card security-policy-card">
<div class="card-heading">
<div><span class="small-label" data-i18n="userAgentBlocking">USER-AGENT BLOCKING</span>
<h2 data-i18n="globalUaBlockingTitle">Global User-Agent blocklist</h2>
<p class="fine" data-i18n="globalUaBlockingHelp">Blocks matching User-Agent values on public proxy vhosts before an upstream is opened. Per-vhost lists are configured in Vhosts → Security.</p>
</div>
</div>
<form class="edit-form security-inline-form" id="global-ua-block-form">
<label class="check"><input id="global-ua-block-enabled" type="checkbox" /><span data-i18n="enabled">Enabled</span></label>
<label><span data-i18n="uaBlockPatterns">Blocked patterns, one per line</span><textarea id="global-ua-block-patterns" rows="6" maxlength="32768" spellcheck="false" placeholder="BadBot&#10;curl/*&#10;*scanner*"></textarea></label>
<p class="fine" data-i18n="uaBlockPatternHelp">Matching is case-insensitive. Plain text matches a substring; * is a wildcard. Requests without User-Agent are not blocked by this rule.</p>
<div class="form-actions"><button class="primary" data-i18n="apply" type="submit">Validate, save and apply</button></div>
</form>
</article>
</div>
<div data-policy-settings-page="headers" hidden="">
<form class="card edit-form" id="headers-form">
<div class="card-heading">
<h2 data-i18n="customHeaders">Global custom headers</h2><span class="pill live"
data-i18n="hotApply">LIVE APPLY</span>
</div>
<p class="fine" data-i18n="globalHeadersHelp">Request rules go to the backend; response
rules go to the client. Route rules run after global rules. Server policy takes
final precedence.</p>
<h3 class="subheading" data-i18n="responseHeaders">Response to client</h3>
<div class="header-rules" id="response-header-rules"></div><button class="quiet"
data-i18n="addHeader" id="add-response-header" type="button">Add header
rule</button>
<h3 class="subheading" data-i18n="requestHeaders">Request to backend</h3>
<div class="header-rules" id="request-header-rules"></div><button class="quiet"
data-i18n="addHeader" id="add-request-header" type="button">Add header rule</button>
<p class="fine" data-i18n="headersHelp">Operations: set, append, remove. Transport, body
encoding and client-identity headers are protected.</p>
<div class="form-actions"><button class="primary" data-i18n="saveHeaders"
type="submit">Apply header rules</button></div>
</form>
</div>
<div data-policy-settings-page="response" hidden="">
<form class="card edit-form" id="response-form">
<div class="card-heading">
<h2 data-i18n="responseSettings">Client response</h2><span class="pill live"
@@ -2106,6 +2151,7 @@
type="submit">Apply response settings</button></div>
</form>
</div>
</section>
<div aria-labelledby="settings-tab-cache" class="settings-page" data-settings-page="cache"
hidden="" id="settings-page-cache" role="tabpanel">
<form class="card edit-form" id="cache-form">
@@ -2435,29 +2481,6 @@
type="submit">Apply transformation policy</button></div>
</form>
</div>
<div aria-labelledby="settings-tab-headers" class="settings-page" data-settings-page="headers"
hidden="" id="settings-page-headers" role="tabpanel">
<form class="card edit-form" id="headers-form">
<div class="card-heading">
<h2 data-i18n="customHeaders">Global custom headers</h2><span class="pill live"
data-i18n="hotApply">LIVE APPLY</span>
</div>
<p class="fine" data-i18n="globalHeadersHelp">Request rules go to the backend; response
rules go to the client. Route rules run after global rules. Server policy takes
final precedence.</p>
<h3 class="subheading" data-i18n="responseHeaders">Response to client</h3>
<div class="header-rules" id="response-header-rules"></div><button class="quiet"
data-i18n="addHeader" id="add-response-header" type="button">Add header
rule</button>
<h3 class="subheading" data-i18n="requestHeaders">Request to backend</h3>
<div class="header-rules" id="request-header-rules"></div><button class="quiet"
data-i18n="addHeader" id="add-request-header" type="button">Add header rule</button>
<p class="fine" data-i18n="headersHelp">Operations: set, append, remove. Transport, body
encoding and client-identity headers are protected.</p>
<div class="form-actions"><button class="primary" data-i18n="saveHeaders"
type="submit">Apply header rules</button></div>
</form>
</div>
<div aria-labelledby="settings-tab-forwarding" class="settings-page"
data-settings-page="forwarding" hidden="" id="settings-page-forwarding" role="tabpanel">
<form class="card edit-form" id="forwarding-form">
@@ -2965,20 +2988,6 @@
</form>
</details>
</article>
<article class="card security-policy-card">
<div class="card-heading">
<div><span class="small-label" data-i18n="userAgentBlocking">USER-AGENT BLOCKING</span>
<h2 data-i18n="globalUaBlockingTitle">Global User-Agent blocklist</h2>
<p class="fine" data-i18n="globalUaBlockingHelp">Blocks matching User-Agent values on public proxy vhosts before an upstream is opened. Per-vhost lists are configured in Vhosts → Security.</p>
</div>
</div>
<form class="edit-form security-inline-form" id="global-ua-block-form">
<label class="check"><input id="global-ua-block-enabled" type="checkbox" /><span data-i18n="enabled">Enabled</span></label>
<label><span data-i18n="uaBlockPatterns">Blocked patterns, one per line</span><textarea id="global-ua-block-patterns" rows="6" maxlength="32768" spellcheck="false" placeholder="BadBot&#10;curl/*&#10;*scanner*"></textarea></label>
<p class="fine" data-i18n="uaBlockPatternHelp">Matching is case-insensitive. Plain text matches a substring; * is a wildcard. Requests without User-Agent are not blocked by this rule.</p>
<div class="form-actions"><button class="primary" data-i18n="apply" type="submit">Validate, save and apply</button></div>
</form>
</article>
<article class="card security-policy-card">
<div class="card-heading">
<div><span class="small-label" data-i18n="securityAccessControl">ACCESS
@@ -3174,10 +3183,13 @@
<div><span class="small-label" data-i18n="configHistoryChanges">CHANGES</span>
<h3 id="config-history-detail-title">-</h3>
</div>
<div class="config-history-detail-actions"><span class="fine"
id="config-history-detail-meta"></span><button class="outline"
data-i18n="configHistoryRestoreAction" id="config-history-restore" type="button" hidden
disabled>Restore revision</button></div>
<div class="config-history-detail-actions">
<span class="fine" id="config-history-detail-meta"></span>
<button class="outline" data-i18n="configHistoryRestoreAction"
id="config-history-restore" type="button" hidden disabled>Restore revision</button>
<button class="quiet" data-i18n="configHistoryFullCompare"
id="config-history-compare-open" type="button" disabled>Full JSON comparison</button>
</div>
</div>
<div class="config-history-revisions" id="config-history-revisions"></div>
<div class="config-history-diff" id="config-history-diff">
@@ -3186,6 +3198,18 @@
</aside>
</div>
</dialog>
<dialog aria-labelledby="config-json-compare-title" class="config-history-json-dialog" id="config-history-json-dialog">
<div class="window-heading">
<h2 data-i18n="configHistoryFullCompare" id="config-json-compare-title">Full JSON comparison</h2>
<div class="window-tools">
<button class="outline" data-i18n="close" id="config-history-json-close" type="button">Close</button>
</div>
</div>
<div class="config-history-json-columns">
<section><h3 data-i18n="configHistoryBefore">Before</h3><pre id="config-history-json-before"></pre></section>
<section><h3 data-i18n="configHistoryAfter">After</h3><pre id="config-history-json-after"></pre></section>
</div>
</dialog>
<dialog aria-labelledby="audit-dialog-title" class="audit-dialog" id="audit-dialog">
<div class="window-heading">
<div><span class="small-label" data-i18n="auditRetention">SQLITE / LAST 100 / RETAINED 10,000</span>