aboutsummaryrefslogtreecommitdiff
path: root/src/server/server_Initialization.ts
diff options
context:
space:
mode:
authorNathan-SR <144961007+Nathan-SR@users.noreply.github.com>2024-10-01 03:58:47 -0400
committerNathan-SR <144961007+Nathan-SR@users.noreply.github.com>2024-10-01 03:58:47 -0400
commit6d35629dd8f997208130981aac1daf36bc83b134 (patch)
tree7b7e3baac15e5f7b4fcb48d90372c48d4552ae4c /src/server/server_Initialization.ts
parentcf45abf8ada938caddb226c825166d4acdee3086 (diff)
parentba01c7376ed4a2b817a26a430faf4041524aef35 (diff)
Merge branch 'master' of https://github.com/brown-dash/Dash-Web into nathan-starter
Diffstat (limited to 'src/server/server_Initialization.ts')
-rw-r--r--src/server/server_Initialization.ts96
1 files changed, 47 insertions, 49 deletions
diff --git a/src/server/server_Initialization.ts b/src/server/server_Initialization.ts
index c3d31e74d..0cf9a6e58 100644
--- a/src/server/server_Initialization.ts
+++ b/src/server/server_Initialization.ts
@@ -29,7 +29,6 @@ import { WebSocket } from './websocket';
export type RouteSetter = (server: RouteManager) => void;
// export let disconnect: Function;
-// eslint-disable-next-line import/no-mutable-exports
export let resolvedServerUrl: string;
const week = 7 * 24 * 60 * 60 * 1000;
@@ -114,13 +113,14 @@ function registerEmbeddedBrowseRelativePathHandler(server: express.Express) {
});
}
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
function proxyServe(req: any, requrl: string, response: any) {
- // eslint-disable-next-line global-require
+ // eslint-disable-next-line global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
const htmlBodyMemoryStream = new (require('memorystream'))();
let wasinBrFormat = false;
const sendModifiedBody = () => {
const header = response.headers['content-encoding'];
- const refToCors = (match: any, tag: string, sym: string, href: string) => `${tag}=${sym + resolvedServerUrl}/corsProxy/${href + sym}`;
+ const refToCors = (match: string, tag: string, sym: string, href: string) => `${tag}=${sym + resolvedServerUrl}/corsProxy/${href + sym}`;
// const relpathToCors = (match: any, href: string, offset: any, string: any) => `="${resolvedServerUrl + '/corsProxy/' + decodeURIComponent(req.originalUrl.split('/corsProxy/')[1].match(/https?:\/\/[^\/]*/)?.[0] ?? '') + '/' + href}"`;
if (header) {
try {
@@ -138,8 +138,10 @@ function proxyServe(req: any, requrl: string, response: any) {
response.send(header?.includes('gzip') ? zlib.gzipSync(htmlText) : htmlText);
} else {
req.pipe(request(requrl))
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
.on('error', (e: any) => console.log('requrl ', e))
.pipe(response)
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
.on('error', (e: any) => console.log('response pipe error', e));
console.log('EMPTY body:' + req.url);
}
@@ -148,58 +150,53 @@ function proxyServe(req: any, requrl: string, response: any) {
}
} else {
req.pipe(htmlBodyMemoryStream)
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
.on('error', (e: any) => console.log('html body memorystream error', e))
.pipe(response)
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
.on('error', (e: any) => console.log('html body memory stream response error', e));
}
};
const retrieveHTTPBody = () => {
// req.headers.cookie = '';
- try {
- const reqval = request(requrl);
- req.pipe(reqval)
- .on('error', (e: any) => {
- console.log(`CORS url error: ${requrl}`, e);
- response.send(`<html><body bgcolor="red" link="006666" alink="8B4513" vlink="006666">
- <title>Error</title>
- <div align="center"><h1>Failed to load: ${requrl} </h1></div>
- <p>${e}</p>
- </body></html>`);
- })
- .on('response', (res: any) => {
- res.headers;
- const headers = Object.keys(res.headers);
- const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
- headers.forEach(headerName => {
- const header = res.headers[headerName];
- if (Array.isArray(header)) {
- res.headers[headerName] = header.filter(h => !headerCharRegex.test(h));
- } else if (headerCharRegex.test(header || '')) {
- delete res.headers[headerName];
- } else res.headers[headerName] = header;
- if (headerName === 'content-encoding') {
- wasinBrFormat = res.headers[headerName] === 'br';
- res.headers[headerName] = 'gzip';
- }
- });
- res.headers['x-permitted-cross-domain-policies'] = 'all';
- res.headers['x-frame-options'] = '';
- res.headers['content-security-policy'] = '';
- // eslint-disable-next-line no-multi-assign
- response.headers = response._headers = res.headers;
- })
- .on('end', sendModifiedBody)
- .pipe(htmlBodyMemoryStream)
- .on('error', (e: any) => console.log('http body pipe error', e));
- } catch (e) {
- console.log("Request failed: ", e);
- response.send(`<html><body bgcolor="red" link="006666" alink="8B4513" vlink="006666">
- <title>Error</title>
- <div align="center"><h1>Failed to load: ${requrl} </h1></div>
- <p>${e}</p>
- </body></html>`);
- }
- }
+ req.pipe(request(requrl))
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ .on('error', (e: any) => {
+ console.log(`CORS url error: ${requrl}`, e);
+ response.send(`<html><body bgcolor="red" link="006666" alink="8B4513" vlink="006666">
+ <title>Error</title>
+ <div align="center"><h1>Failed to load: ${requrl} </h1></div>
+ <p>${e}</p>
+ </body></html>`);
+ })
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ .on('response', (res: any) => {
+ res.headers;
+ const headers = Object.keys(res.headers);
+ const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+ headers.forEach(headerName => {
+ const header = res.headers[headerName];
+ if (Array.isArray(header)) {
+ res.headers[headerName] = header.filter(h => !headerCharRegex.test(h));
+ } else if (headerCharRegex.test(header || '')) {
+ delete res.headers[headerName];
+ } else res.headers[headerName] = header;
+ if (headerName === 'content-encoding') {
+ wasinBrFormat = res.headers[headerName] === 'br';
+ res.headers[headerName] = 'gzip';
+ }
+ });
+ res.headers['x-permitted-cross-domain-policies'] = 'all';
+ res.headers['x-frame-options'] = '';
+ res.headers['content-security-policy'] = '';
+ // eslint-disable-next-line no-multi-assign
+ response.headers = response._headers = res.headers;
+ })
+ .on('end', sendModifiedBody)
+ .pipe(htmlBodyMemoryStream)
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ .on('error', (e: any) => console.log('http body pipe error', e));
+ };
retrieveHTTPBody();
}
@@ -248,13 +245,14 @@ function registerAuthenticationRoutes(server: express.Express) {
export default async function InitializeServer(routeSetter: RouteSetter) {
const isRelease = determineEnvironment();
const app = buildWithMiddleware(express());
- const compiler = webpack(config as any);
+ const compiler = webpack(config as webpack.Configuration);
// route table managed by express. routes are tested sequentially against each of these map rules. when a match is found, the handler is called to process the request
app.use(wdm(compiler, { publicPath: config.output.publicPath }));
app.use(whm(compiler));
app.get(/^\/+$/, (req, res) => res.redirect(req.user ? '/home' : '/login')); // target urls that consist of one or more '/'s with nothing in between
app.use(express.static(publicDirectory, { setHeaders: res => res.setHeader('Access-Control-Allow-Origin', '*') })); // all urls that start with dash's public directory: /files/ (e.g., /files/images, /files/audio, etc)
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
app.use(cors({ origin: (_origin: any, callback: any) => callback(null, true) }));
registerAuthenticationRoutes(app); // this adds routes to authenticate a user (login, etc)
registerCorsProxy(app); // this adds a /corsProxy/ route to allow clients to get to urls that would otherwise be blocked by cors policies