diff --git a/dashcaddy-api/src/app.js b/dashcaddy-api/src/app.js index 576ed39..c00893a 100644 --- a/dashcaddy-api/src/app.js +++ b/dashcaddy-api/src/app.js @@ -17,41 +17,41 @@ const { errorResponse, ok } = require('./utils/responses'); const { asyncHandler } = require('./utils/async-handler'); // Managers and utilities -const StateManager = require('.//state-manager'); +const StateManager = require('./managers/state-manager'); const platformPaths = require('../platform-paths'); -const { LicenseManager } = require('.//license-manager'); -const credentialManager = require('.//credential-manager'); -const authManager = require('.//auth-manager'); -const dockerSecurity = require('.//docker-security'); -const auditLogger = require('.//audit-logger'); -const portLockManager = require('.//port-lock-manager'); -const resourceMonitor = require('.//resource-monitor'); -const backupManager = require('.//backup-manager'); -const healthChecker = require('.//health-checker'); -const updateManager = require('.//update-manager'); -const selfUpdater = require('.//self-updater'); -const configureMiddleware = require('.//middleware'); -const { validateStartupConfig: _validateStartupConfig, syncHealthCheckerServices } = require('.//startup-validator'); -const { CSRF_HEADER_NAME } = require('.//csrf-protection'); -const { resolveServiceUrl } = require('.//url-resolver'); -const metrics = require('.//metrics'); -const { validateURL } = require('.//input-validator'); +const { LicenseManager } = require('./managers/license-manager'); +const credentialManager = require('./managers/credential-manager'); +const authManager = require('./managers/auth-manager'); +const dockerSecurity = require('./security/docker-security'); +const auditLogger = require('./security/audit-logger'); +const portLockManager = require('./managers/port-lock-manager'); +const resourceMonitor = require('./managers/resource-monitor'); +const backupManager = require('./utilities/backup-manager'); +const healthChecker = require('./monitoring/health-checker'); +const updateManager = require('./managers/update-manager'); +const selfUpdater = require('./docker/self-updater'); +const configureMiddleware = require('./utilities/middleware'); +const { validateStartupConfig: _validateStartupConfig, syncHealthCheckerServices } = require('./utilities/startup-validator'); +const { CSRF_HEADER_NAME } = require('./security/csrf-protection'); +const { resolveServiceUrl } = require('./utilities/url-resolver'); +const metrics = require('./monitoring/metrics'); +const { validateURL } = require('./security/input-validator'); // Optional modules let dockerMaintenance, logDigest; -try { dockerMaintenance = require('.//docker-maintenance'); } catch (_) { /* optional module */ } -try { logDigest = require('.//log-digest'); } catch (_) { /* optional module */ } +try { dockerMaintenance = require('./docker/docker-maintenance'); } catch (_) { /* optional module */ } +try { logDigest = require('./security/log-digest'); } catch (_) { /* optional module */ } // Workflow engine (bundled workflows) let bundledWorkflowsModule; let workflowEngine = null; try { - bundledWorkflowsModule = require('.//bundled-workflows'); + bundledWorkflowsModule = require('./recipes/bundled-workflows'); } catch (_) { /* optional module */ } // Templates -const { APP_TEMPLATES, TEMPLATE_CATEGORIES, DIFFICULTY_LEVELS } = require('.//app-templates'); -const { RECIPE_TEMPLATES, RECIPE_CATEGORIES } = require('.//recipe-templates'); +const { APP_TEMPLATES, TEMPLATE_CATEGORIES, DIFFICULTY_LEVELS } = require('./docker/app-templates'); +const { RECIPE_TEMPLATES, RECIPE_CATEGORIES } = require('./recipes/recipe-templates'); // Route modules const healthRoutes = require('../routes/health'); @@ -81,17 +81,17 @@ const dockerResourcesRoutes = require('../routes/docker-resources'); const eventsRoutes = require('../routes/events'); const workflowsRoutes = require('../routes/workflows'); const dependenciesRoutes = require('../routes/dependencies'); -const DependencyManager = require('.//dependency-manager'); +const DependencyManager = require('./managers/dependency-manager'); const autoRestartRoutes = require('../routes/auto-restart'); const configDriftRoutes = require('../routes/config-drift'); const sslMonitorRoutes = require('../routes/ssl-monitor'); -const { AutoRestartManager } = require('.//auto-restart-manager'); -const { ConfigDriftDetector } = require('.//config-drift-detector'); -const SSLMonitor = require('.//ssl-monitor'); +const { AutoRestartManager } = require('./managers/auto-restart-manager'); +const { ConfigDriftDetector } = require('./managers/config-drift-detector'); +const SSLMonitor = require('./monitoring/ssl-monitor'); const DNSPropagationChecker = require('./dns/dns-propagation'); // Constants -const { APP } = require('.//constants'); +const { APP } = require('./utilities/constants'); /** * Create and configure the Express application @@ -233,15 +233,15 @@ async function createApp() { auditLogger, authManager, log, - cryptoUtils: require('.//crypto-utils'), + cryptoUtils: require('./security/crypto-utils'), isValidContainerId, isTailscaleIP, getTailscaleStatus, - RATE_LIMITS: require('.//constants').RATE_LIMITS, - LIMITS: require('.//constants').LIMITS, - APP: require('.//constants').APP, - CACHE_CONFIGS: require('.//cache-config').CACHE_CONFIGS, - createCache: require('.//cache-config').createCache, + RATE_LIMITS: require('./utilities/constants').RATE_LIMITS, + LIMITS: require('./utilities/constants').LIMITS, + APP: require('./utilities/constants').APP, + CACHE_CONFIGS: require('./utilities/cache-config').CACHE_CONFIGS, + createCache: require('./utilities/cache-config').createCache, }); const { strictLimiter } = middlewareResult; @@ -254,7 +254,7 @@ async function createApp() { // eslint-disable-next-line require-await -- may grow awaits as config loading evolves async function readConfig() { - const { readJsonFile } = require('.//fs-helpers'); + const { readJsonFile } = require('./utilities/fs-helpers'); return readJsonFile(config.CONFIG_FILE, {}); } @@ -277,7 +277,7 @@ async function createApp() { async function saveTotpConfig() { try { - const { writeJsonFile } = require('.//fs-helpers'); + const { writeJsonFile } = require('./utilities/fs-helpers'); await writeJsonFile(config.TOTP_CONFIG_FILE, totpConfig); } catch (e) { log.error('config', 'Could not save TOTP config', { error: e.message }); @@ -776,7 +776,7 @@ async function createApp() { // Lightweight probe endpoint app.get('/probe/:id', boundAsyncHandler(async (req, res) => { const id = req.params.id; - const { exists } = require('.//fs-helpers'); + const { exists } = require('./utilities/fs-helpers'); let service = null; if (id !== 'internet' && await exists(config.SERVICES_FILE)) { @@ -939,7 +939,7 @@ async function createApp() { app.get('/api/v1/docs/spec', boundAsyncHandler(async (req, res) => { const path = require('path'); - const { exists } = require('.//fs-helpers'); + const { exists } = require('./utilities/fs-helpers'); const fsp = require('fs').promises; const specPath = path.join(__dirname, '../openapi.yaml'); @@ -952,7 +952,7 @@ async function createApp() { }, 'api-docs-spec')); // Error handlers (MUST be last) - const { notFoundHandler, errorMiddleware } = require('.//error-handler'); + const { notFoundHandler, errorMiddleware } = require('./utilities/error-handler'); app.use('/api', notFoundHandler); app.use(errorMiddleware);