t
This commit is contained in:
parent
4c4e767ec6
commit
9d70afb4cc
42 changed files with 1266 additions and 630 deletions
|
|
@ -11,9 +11,29 @@ function normalizePort(value) {
|
|||
return port;
|
||||
}
|
||||
|
||||
function renderPublicBoundary(){
|
||||
return `\n`+
|
||||
` # The service source may share this directory with Apache. Expose only\n`+
|
||||
` # the curated browser bundle and deny every other direct file request.\n`+
|
||||
` RewriteRule ^$ - [L]\n`+
|
||||
` RewriteRule ^(?:index\\.html|style\\.css|favicon\\.(?:svg|ico)|build-meta\\.js|runtime-config\\.js|shared-contracts\\.js|store-catalog\\.(?:generated\\.js|json)|puzzle-patterns\\.js|puzzle-core\\.js|app-logic\\.js|archive-codec\\.js|field-persistence(?:-worker)?\\.js|puzzle-worker\\.js|app\\.js|api-bridge\\.php)$ - [L]\n`+
|
||||
` RewriteRule ^(?:assets|client)(?:/|$) - [L]\n`+
|
||||
` RewriteRule ^ - [F,L]\n`;
|
||||
}
|
||||
|
||||
function renderSensitiveFileFallback(){
|
||||
return `<FilesMatch "(?i)^(?:\\.|server\\.js$|realtime-server\\.js$|package(?:-lock)?\\.json$|build-config\\.json$|README\\.md$)">\n`+
|
||||
` Require all denied\n`+
|
||||
`</FilesMatch>\n`;
|
||||
}
|
||||
|
||||
function renderApacheBridge(portValue) {
|
||||
const port = normalizePort(portValue);
|
||||
return `${BEGIN_MARKER}\n` +
|
||||
`ServerSignature Off\n` +
|
||||
`<IfModule mod_headers.c>\n` +
|
||||
` Header always unset X-Powered-By\n` +
|
||||
`</IfModule>\n` +
|
||||
`<IfModule mod_rewrite.c>\n` +
|
||||
` RewriteEngine On\n` +
|
||||
`\n` +
|
||||
|
|
@ -23,17 +43,36 @@ function renderApacheBridge(portValue) {
|
|||
` RewriteCond %{HTTP:Upgrade} =websocket [NC]\n` +
|
||||
` RewriteRule ^api/realtime/?$ ws://127.0.0.1:${port}/api/realtime [P,L]\n` +
|
||||
` </IfModule>\n` +
|
||||
` RewriteRule ^api/(.*)$ http://127.0.0.1:${port}/api/$1 [P,L]\n` +
|
||||
` <IfModule mod_proxy_http.c>\n` +
|
||||
` RewriteRule ^api/(.*)$ http://127.0.0.1:${port}/api/$1 [P,L]\n` +
|
||||
` </IfModule>\n` +
|
||||
` </IfModule>\n` +
|
||||
`\n` +
|
||||
` # Shared hosts often disable mod_proxy. Route ordinary API requests\n` +
|
||||
` # through the bundled PHP bridge instead.\n` +
|
||||
` RewriteCond %{REQUEST_FILENAME} !-f\n` +
|
||||
` RewriteRule ^api/(.*)$ api-bridge.php?path=/api/$1 [QSA,L]\n` +
|
||||
renderPublicBoundary()+
|
||||
`</IfModule>\n` +
|
||||
`<Files ".linkfield-port">\n` +
|
||||
` Require all denied\n` +
|
||||
`</Files>\n` +
|
||||
renderSensitiveFileFallback()+
|
||||
`${END_MARKER}\n`;
|
||||
}
|
||||
|
||||
function renderApacheBootstrap(){
|
||||
return `${BEGIN_MARKER}\n`+
|
||||
`ServerSignature Off\n`+
|
||||
`<IfModule mod_headers.c>\n`+
|
||||
` Header always unset X-Powered-By\n`+
|
||||
`</IfModule>\n`+
|
||||
`<IfModule mod_rewrite.c>\n`+
|
||||
` RewriteEngine On\n\n`+
|
||||
` # Safe bootstrap: use the bounded PHP bridge until the Node server\n`+
|
||||
` # writes a verified current proxy port after it begins listening.\n`+
|
||||
` RewriteCond %{REQUEST_FILENAME} !-f\n`+
|
||||
` RewriteRule ^api/(.*)$ api-bridge.php?path=/api/$1 [QSA,L]\n`+
|
||||
renderPublicBoundary()+
|
||||
`</IfModule>\n`+
|
||||
renderSensitiveFileFallback()+
|
||||
`${END_MARKER}\n`;
|
||||
}
|
||||
|
||||
|
|
@ -59,4 +98,4 @@ async function installApacheBridge({fsp, root, port, enabled = true} = {}) {
|
|||
return {enabled:true, written:true, file};
|
||||
}
|
||||
|
||||
module.exports = Object.freeze({BEGIN_MARKER, END_MARKER, renderApacheBridge, replaceManagedBlock, installApacheBridge});
|
||||
module.exports = Object.freeze({BEGIN_MARKER, END_MARKER, renderApacheBridge,renderApacheBootstrap,replaceManagedBlock,installApacheBridge});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue