v0.32.4
This commit is contained in:
1 parent
b0f211555a
commit
8b9ca4db44
39 files changed
+1481
-303
No files matched your search
@@ -0,0 +1,42 @@
|
||||
import fs from 'node:fs';
|
||||
import vm from 'node:vm';
|
||||
import assert from 'node:assert/strict';
|
||||
|
||||
const ui = fs.readFileSync('src/admin/web/vhosts/core.js', 'utf8');
|
||||
const head = 'function debugOriginIssues(members) {';
|
||||
const tail = '\nfunction aclEditor(';
|
||||
const start = ui.indexOf(head);
|
||||
const end = ui.indexOf(tail, start);
|
||||
assert(start >= 0 && end > start, 'debug origin verification helper is present');
|
||||
const warn = vm.runInNewContext('(' + ui.slice(start, end).trim() + ')', { URL });
|
||||
|
||||
function member(protocol, more={}) { return {
|
||||
url:'https://10.87.20.2:443',protocol,preserve_host:true,
|
||||
pool_eligible:true,allow_private:true,tls_verify:false,...more,
|
||||
}; }
|
||||
for (const protocol of ['http1', 'auto', 'http2', 'h2']) {
|
||||
assert.equal(warn([member(protocol)]).length, 0,
|
||||
`${protocol} is accepted without forcing H1 or disabling preserved Host`);
|
||||
assert.equal(warn([member(protocol, {tls_server_name:'unitraklub.pl',tls_verify:true})]).length, 0,
|
||||
`${protocol} supports explicitly verified certificate DNS names`);
|
||||
}
|
||||
assert.equal(warn([member('h2',{pool_eligible:false,allow_private:false})]).length,0,
|
||||
'pool and private-origin flags must not be mistaken for protocol requirements');
|
||||
assert.equal(warn([member('auto',{tls_verify:true})]).length,1,
|
||||
'HTTPS-by-IP without TLS identity receives a nonblocking warning');
|
||||
assert.equal(warn([{...member('h2',{tls_verify:true}),url:'https://site.example'}]).length,0,
|
||||
'DNS HTTPS origin needs no IP-certificate warning');
|
||||
assert.equal(warn([{...member('h2',{tls_verify:true}),url:'http://10.87.20.2:80'}]).length,0);
|
||||
assert(!/preserve\.disabled\s*=|preserve\.checked\s*=\s*false/.test(ui),
|
||||
'Protocol selector may not disable or clear Preserve Host');
|
||||
assert(ui.includes('value.preserve_host === true'), 'Existing backend preference remains visible');
|
||||
assert(ui.includes('protocol.value = "http1"; preserve.checked = true'),
|
||||
'Optional explicit H1 troubleshooting preset is retained');
|
||||
assert(!ui.includes('syncProtocol()'), 'Do not call removed protocol-only Host limiter');
|
||||
assert(ui.includes('protocol.dispatchEvent(new Event("change"))'), 'Preset refreshes protocol help text');
|
||||
for (const lang of ['en_US','pl_pl']) {
|
||||
const t=JSON.parse(fs.readFileSync(`langs/${lang}.json`,'utf8')).translations;
|
||||
for (const key of ['vhPreserveHost','vhDebugOriginPreset','vhOriginPresetHelp','vhDebugOriginMismatch'])
|
||||
assert(t[key] && t[key].length>30,`${lang}.${key}`);
|
||||
}
|
||||
console.log('PASS: Preserve Host is available for four modes; IP/TLS hint is conditional and optional');
|
||||
Reference in new issue
Block a user