63 lines
2.5 KiB
JavaScript
63 lines
2.5 KiB
JavaScript
const { checkRateLimit } = require('../../../infrastructure/rate_limit');
|
|
const { trackRequest } = require('../../../maintenance/metrics');
|
|
const { handleStaticRoutes } = require('./static');
|
|
const { handleDomainsRoutes } = require('./domains');
|
|
const { handleEntriesRoutes } = require('./entries');
|
|
const { handlePeersRoutes } = require('./peers');
|
|
const { handleCertsRoutes } = require('./certs');
|
|
const { handleInterfacesRoutes } = require('./interfaces');
|
|
const { handleLocalDnsRoutes } = require('./local-dns');
|
|
const { handleStatusRoutes } = require('./status');
|
|
const { handleStatsRoutes } = require('./stats');
|
|
const { handleHolesailRoutes } = require('./holesail');
|
|
const { handleSettingsRoutes } = require('./settings');
|
|
const { handleBackupsRoutes } = require('./backups');
|
|
const { handleDiagnosticsRoutes } = require('./diagnostics');
|
|
const { handleConsensusRoutes } = require('./consensus');
|
|
const { handlePluginsRoutes } = require('./plugins');
|
|
|
|
async function handleAdminRequest(req, res) {
|
|
const url = new URL(req.url, `https://${req.headers.host}`);
|
|
const urlPath = url.pathname;
|
|
const method = req.method;
|
|
|
|
// Check rate limit for API endpoints (GET requests and local IPs are exempt)
|
|
// Only rate limit POST requests, GET requests are safe and expected to be frequent
|
|
if (urlPath.startsWith('/api/') && method === 'POST') {
|
|
const rateLimitError = checkRateLimit(req);
|
|
if (rateLimitError) {
|
|
res.writeHead(rateLimitError.statusCode, rateLimitError.headers);
|
|
res.end(rateLimitError.body);
|
|
trackRequest(urlPath, false);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Attach urlPath to req for route handlers
|
|
req.urlPath = urlPath;
|
|
|
|
// Try each route handler in order
|
|
if (await handleStaticRoutes(req, res)) return;
|
|
if (await handleDomainsRoutes(req, res)) return;
|
|
if (await handleEntriesRoutes(req, res)) return;
|
|
if (await handlePeersRoutes(req, res)) return;
|
|
if (await handleCertsRoutes(req, res)) return;
|
|
if (await handleInterfacesRoutes(req, res)) return;
|
|
if (await handleLocalDnsRoutes(req, res)) return;
|
|
if (await handleStatusRoutes(req, res)) return;
|
|
if (await handleStatsRoutes(req, res)) return;
|
|
if (await handleHolesailRoutes(req, res)) return;
|
|
if (await handleSettingsRoutes(req, res)) return;
|
|
if (await handleBackupsRoutes(req, res)) return;
|
|
if (await handleDiagnosticsRoutes(req, res)) return;
|
|
if (await handleConsensusRoutes(req, res)) return;
|
|
if (await handlePluginsRoutes(req, res)) return;
|
|
|
|
// No route matched
|
|
res.writeHead(404);
|
|
res.end('Not Found');
|
|
}
|
|
|
|
module.exports = { handleAdminRequest };
|
|
|