From 82f0ee709fb4239c009ce802e0e152a4293b5e35 Mon Sep 17 00:00:00 2001 From: JBB0807 <104856796+JBB0807@users.noreply.github.com> Date: Wed, 21 May 2025 11:16:13 -0700 Subject: [PATCH 1/2] performance improvement on proxy service --- auth-service/routes/auth.js | 23 ------------- proxy-service/server.js | 67 ++++++++++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 39 deletions(-) diff --git a/auth-service/routes/auth.js b/auth-service/routes/auth.js index 8d06f8b..45adef9 100644 --- a/auth-service/routes/auth.js +++ b/auth-service/routes/auth.js @@ -60,29 +60,6 @@ auth.get("/current_user", (req, res) => { } }); -// router.get("/google/login", (req, res) => { -// if (req.user) { -// console.log(`${process.env.DB_USER_SERVICE_URL}instructor/register-user`); -// axios -// .post(`${process.env.DB_USER_SERVICE_URL}instructor/register-user`, { -// user: req.user, -// }) -// .then((response) => { -// req.user.userId = response.data.user.userid; -// console.log("User ID:", response.data.user.userid); -// req.user.role = "instructor"; -// console.log("User registration response:", response.data); -// res.redirect(process.env.LOGIN_REDIRECT_URL); -// }) -// .catch((error) => { -// console.error("Error registering user:", error.message); -// res.status(500).json({ error: true, message: "User login failed" }); -// }); -// } else { -// res.status(403).json({ error: true, message: "Not Authorized" }); -// } -// }); - auth.get("/login/failed", (req, res) => { res.status(401).json({ error: true, diff --git a/proxy-service/server.js b/proxy-service/server.js index 677e4b5..c8602af 100644 --- a/proxy-service/server.js +++ b/proxy-service/server.js @@ -5,28 +5,63 @@ const app = express(); const port = 8080; // Middleware to handle dynamic IPv6 proxying +// app.use('/:ipv6', (req, res, next) => { +// const ipv6 = req.params.ipv6; + +// // Validate or sanitize the IPv6 if needed +// const targetUrl = `http://[${ipv6}]:8000`; +// console.log(`Proxying request to: ${targetUrl}`); + +// // Create and attach the proxy middleware *once per request* +// const proxy = createProxyMiddleware({ +// target: targetUrl, +// changeOrigin: true, +// logLevel: 'debug', +// // pathRewrite: { +// // [`^/${ipv6}`]: '/', // Send to root of the target +// // }, +// onError(err, req, res) { +// console.error('Proxy error:', err.message); +// res.status(502).send('Bad Gateway: Failed to connect to target'); +// } +// }); + +// return proxy(req, res, next); +// }); + +// Cache proxy instances per target to avoid recreating each time +const proxyCache = new Map(); + +// Basic IPv6 validation pattern (can be improved or replaced with a library like 'ipaddr.js') +const isValidIPv6 = (ip) => /^[0-9a-fA-F:]+$/.test(ip); + app.use('/:ipv6', (req, res, next) => { const ipv6 = req.params.ipv6; - // Validate or sanitize the IPv6 if needed + if (!isValidIPv6(ipv6)) { + return res.status(400).send('Invalid IPv6 address'); + } + const targetUrl = `http://[${ipv6}]:8000`; - console.log(`Proxying request to: ${targetUrl}`); + console.log(`Proxying to: ${targetUrl}`); - // Create and attach the proxy middleware *once per request* - const proxy = createProxyMiddleware({ - target: targetUrl, - changeOrigin: true, - logLevel: 'debug', - // pathRewrite: { - // [`^/${ipv6}`]: '/', // Send to root of the target - // }, - onError(err, req, res) { - console.error('Proxy error:', err.message); - res.status(502).send('Bad Gateway: Failed to connect to target'); - } - }); + // Reuse proxy middleware for the same target + if (!proxyCache.has(targetUrl)) { + proxyCache.set(targetUrl, createProxyMiddleware({ + target: targetUrl, + changeOrigin: true, + logLevel: 'debug', + pathRewrite: (path, req) => path.replace(`/${ipv6}`, '/'), + onError(err, req, res) { + console.error(`Proxy error for ${targetUrl}:`, err.message); + if (!res.headersSent) { + res.status(502).send('Bad Gateway: Failed to connect to target'); + } + } + })); + } - return proxy(req, res, next); + return proxyCache.get(targetUrl)(req, res, next); }); app.listen(port, '0.0.0.0', () => { From 27abb409c089b1c03868db2f19390a31ef36335e Mon Sep 17 00:00:00 2001 From: JBB0807 <104856796+JBB0807@users.noreply.github.com> Date: Wed, 21 May 2025 11:16:29 -0700 Subject: [PATCH 2/2] performance improvement on proxy service --- proxy-service/server.js | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/proxy-service/server.js b/proxy-service/server.js index c8602af..15403ea 100644 --- a/proxy-service/server.js +++ b/proxy-service/server.js @@ -4,31 +4,6 @@ const { createProxyMiddleware } = require('http-proxy-middleware'); const app = express(); const port = 8080; -// Middleware to handle dynamic IPv6 proxying -// app.use('/:ipv6', (req, res, next) => { -// const ipv6 = req.params.ipv6; - -// // Validate or sanitize the IPv6 if needed -// const targetUrl = `http://[${ipv6}]:8000`; -// console.log(`Proxying request to: ${targetUrl}`); - -// // Create and attach the proxy middleware *once per request* -// const proxy = createProxyMiddleware({ -// target: targetUrl, -// changeOrigin: true, -// logLevel: 'debug', -// // pathRewrite: { -// // [`^/${ipv6}`]: '/', // Send to root of the target -// // }, -// onError(err, req, res) { -// console.error('Proxy error:', err.message); -// res.status(502).send('Bad Gateway: Failed to connect to target'); -// } -// }); - -// return proxy(req, res, next); -// }); - // Cache proxy instances per target to avoid recreating each time const proxyCache = new Map();