const fs = require('fs').promises; const pathModule = require('path'); const { logDebug, logError } = require('../../infrastructure/logger'); async function handleStaticRoutes(req, res) { const urlPath = req.urlPath || new URL(req.url, `https://${req.headers.host}`).pathname; const method = req.method; const tabs = ['domains', 'host', 'local-dns', 'entries', 'peers', 'certs', 'interfaces', 'logs', 'settings', 'stats']; if (method === 'GET' && urlPath.startsWith('/') && tabs.includes(urlPath.substring(1))) { res.writeHead(302, { 'Location': `/#${urlPath.substring(1)}` }); res.end(); return true; } if (method === 'GET' && urlPath === '/') { logDebug('Admin', 'Serving admin panel HTML'); try { const html = await fs.readFile(pathModule.join(__dirname, '..', 'index.html'), 'utf8'); res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(html); } catch (err) { logError('Admin', `Failed to serve index.html: ${err.message}`); res.writeHead(500); res.end('Failed to load admin panel'); } return true; } if (method === 'GET' && urlPath === '/tailwind.css') { try { const css = await fs.readFile(pathModule.join(__dirname, '..', '..', 'css', 'tailwind.css'), 'utf8'); res.writeHead(200, { 'Content-Type': 'text/css' }); res.end(css); } catch (err) { logError('Admin', `Failed to serve tailwind.css: ${err.message}`); res.writeHead(500); res.end('Failed to load Tailwind CSS'); } return true; } if (method === 'GET' && urlPath === '/styles.css') { try { const css = await fs.readFile(pathModule.join(__dirname, '..', 'styles.css'), 'utf8'); res.writeHead(200, { 'Content-Type': 'text/css' }); res.end(css); } catch (err) { logError('Admin', `Failed to serve styles.css: ${err.message}`); res.writeHead(500); res.end('Failed to load styles'); } return true; } if (method === 'GET' && urlPath === '/admin.js') { try { const js = await fs.readFile(pathModule.join(__dirname, '..', 'admin.js'), 'utf8'); res.writeHead(200, { 'Content-Type': 'text/javascript' }); res.end(js); } catch (err) { logError('Admin', `Failed to serve admin.js: ${err.message}`); res.writeHead(500); res.end('Failed to load script'); } return true; } if (urlPath === '/favicon.ico') { res.writeHead(404); res.end('Not Found'); return true; } return false; } module.exports = { handleStaticRoutes };