mirror of
https://github.com/Lissy93/web-check.git
synced 2025-06-19 03:16:45 +02:00
Send user direct to check page, if self-hosted
This commit is contained in:
parent
d9135883de
commit
42d6e0394f
@ -31,6 +31,9 @@ const site = unwrapEnvVar('SITE_URL', 'https://web-check.xyz');
|
||||
// The base URL of the site (if serving from a subdirectory)
|
||||
const base = unwrapEnvVar('BASE_URL', '/');
|
||||
|
||||
// Should run the app in boss-mode (requires extra configuration)
|
||||
const isBossServer = unwrapEnvVar('BOSS_SERVER', false);
|
||||
|
||||
// Initialize Astro integrations
|
||||
const integrations = [react(), partytown(), sitemap()];
|
||||
|
||||
@ -62,17 +65,13 @@ console.log(
|
||||
`to help fund maintenance & development.\x1b[0m\n`,
|
||||
);
|
||||
|
||||
const buildOptions = {
|
||||
output: 'dist',
|
||||
format: 'esm',
|
||||
};
|
||||
const redirects = {};
|
||||
|
||||
|
||||
const redirects = {
|
||||
'/': '/test',
|
||||
// '/results/[...target]': '/check/[...target]', // The old path was /results (redirect to maintain compatibility)
|
||||
// Skip the marketing homepage for self-hosted users
|
||||
if (isBossServer && isBossServer === 'true') {
|
||||
redirects['/'] = '/check';
|
||||
}
|
||||
|
||||
// Export Astro configuration
|
||||
export default defineConfig({ output, base, integrations, site, adapter, redirects, buildOptions });
|
||||
export default defineConfig({ output, base, integrations, site, adapter, redirects });
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"name": "web-check",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"homepage": ".",
|
||||
"scripts": {
|
||||
|
92
server.js
92
server.js
@ -79,54 +79,62 @@ fs.readdirSync(dirPath, { withFileTypes: true })
|
||||
});
|
||||
});
|
||||
|
||||
// Create a single API endpoint to execute all lambda functions
|
||||
app.get('/api', async (req, res) => {
|
||||
const results = {};
|
||||
const { url } = req.query;
|
||||
const maxExecutionTime = process.env.API_TIMEOUT_LIMIT || 20000;
|
||||
|
||||
const executeHandler = async (handler, req, res) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const mockRes = {
|
||||
status: (statusCode) => mockRes,
|
||||
json: (body) => resolve({ body }),
|
||||
};
|
||||
await handler({ ...req, query: { url } }, mockRes);
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const timeout = (ms, jobName = null) => {
|
||||
return new Promise((_, reject) => {
|
||||
setTimeout(() => {
|
||||
reject(new Error(
|
||||
`Timed out after ${ms/1000} seconds${jobName ? `, when executing ${jobName}` : ''}`
|
||||
));
|
||||
}, ms);
|
||||
});
|
||||
};
|
||||
|
||||
const handlerPromises = Object.entries(handlers).map(async ([route, handler]) => {
|
||||
const routeName = route.replace(`${API_DIR}/`, '');
|
||||
|
||||
// Create a single API endpoint to execute all lambda functions
|
||||
app.get('/api', async (req, res) => {
|
||||
const results = {};
|
||||
const { url } = req.query;
|
||||
const maxExecutionTime = process.env.API_TIMEOUT_LIMIT || 20000;
|
||||
|
||||
const executeHandler = async (handler, req, res) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const result = await Promise.race([
|
||||
executeHandler(handler, req, res),
|
||||
timeout(maxExecutionTime, routeName)
|
||||
]);
|
||||
results[routeName] = result.body;
|
||||
const mockRes = {
|
||||
status: (statusCode) => mockRes,
|
||||
json: (body) => resolve({ body }),
|
||||
};
|
||||
await handler({ ...req, query: { url } }, mockRes);
|
||||
} catch (err) {
|
||||
results[routeName] = { error: err.message };
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
|
||||
await Promise.all(handlerPromises);
|
||||
res.json(results);
|
||||
};
|
||||
|
||||
const timeout = (ms, jobName = null) => {
|
||||
return new Promise((_, reject) => {
|
||||
setTimeout(() => {
|
||||
reject(new Error(
|
||||
`Timed out after ${ms/1000} seconds${jobName ? `, when executing ${jobName}` : ''}`
|
||||
));
|
||||
}, ms);
|
||||
});
|
||||
};
|
||||
|
||||
const handlerPromises = Object.entries(handlers).map(async ([route, handler]) => {
|
||||
const routeName = route.replace(`${API_DIR}/`, '');
|
||||
|
||||
try {
|
||||
const result = await Promise.race([
|
||||
executeHandler(handler, req, res),
|
||||
timeout(maxExecutionTime, routeName)
|
||||
]);
|
||||
results[routeName] = result.body;
|
||||
} catch (err) {
|
||||
results[routeName] = { error: err.message };
|
||||
}
|
||||
});
|
||||
|
||||
await Promise.all(handlerPromises);
|
||||
res.json(results);
|
||||
});
|
||||
|
||||
// Skip the marketing homepage, for self-hosted users
|
||||
app.use((req, res, next) => {
|
||||
if (req.path === '/' && process.env.BOSS_SERVER !== 'true') {
|
||||
req.url = '/check';
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
// Serve up the GUI - if build dir exists, and GUI feature enabled
|
||||
if (process.env.DISABLE_GUI && process.env.DISABLE_GUI !== 'false') {
|
||||
app.get('*', async (req, res) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user