54 lines
1.6 KiB
JavaScript
Executable file
54 lines
1.6 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
const PORT_PATTERN = /^(?:[1-9]\d{3,4})$/
|
|
|
|
const fail = (code) => {
|
|
throw new Error(code)
|
|
}
|
|
|
|
export function renderFrontDoorSnippet(portValue) {
|
|
const text = String(portValue ?? '')
|
|
if (!PORT_PATTERN.test(text)) fail('HOLOLAKE_RELEASE_FRONT_DOOR_PORT_REQUIRED')
|
|
const port = Number(text)
|
|
if (!Number.isInteger(port) || port < 1024 || port > 65535) fail('HOLOLAKE_RELEASE_FRONT_DOOR_PORT_INVALID')
|
|
return `location = /hololake/releases {
|
|
return 308 /hololake/releases/;
|
|
}
|
|
|
|
location ^~ /hololake/releases/ {
|
|
limit_except GET HEAD { deny all; }
|
|
client_max_body_size 0;
|
|
proxy_pass http://127.0.0.1:${port};
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header Connection "";
|
|
proxy_set_header Authorization "";
|
|
proxy_set_header Cookie "";
|
|
proxy_set_header X-Forwarded-For "";
|
|
proxy_set_header X-Forwarded-Host "";
|
|
proxy_set_header X-Forwarded-Proto "";
|
|
proxy_pass_request_body off;
|
|
proxy_set_header Content-Length "";
|
|
proxy_connect_timeout 2s;
|
|
proxy_send_timeout 10s;
|
|
proxy_read_timeout 60s;
|
|
}
|
|
`
|
|
}
|
|
|
|
export function main(argv = process.argv.slice(2)) {
|
|
const portIndex = argv.indexOf('--loopback-port')
|
|
if (portIndex < 0 || portIndex + 1 >= argv.length || argv.length !== 2) {
|
|
fail('HOLOLAKE_RELEASE_FRONT_DOOR_USAGE:--loopback-port PORT')
|
|
}
|
|
process.stdout.write(renderFrontDoorSnippet(argv[portIndex + 1]))
|
|
}
|
|
|
|
if (process.argv[1] && import.meta.url === new URL(`file://${process.argv[1]}`).href) {
|
|
try {
|
|
main()
|
|
} catch (error) {
|
|
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`)
|
|
process.exitCode = 1
|
|
}
|
|
}
|