diff --git a/config/paths.js b/config/paths.js new file mode 100644 index 0000000..9f9987b --- /dev/null +++ b/config/paths.js @@ -0,0 +1,7 @@ +// Lokasi file settings.json — dapat diarahkan via env SETTINGS_PATH +// (dipakai agar settings bisa disimpan di direktori yang di-mount / persisten). +const path = require('path'); +const settingsPath = process.env.SETTINGS_PATH + ? path.resolve(process.env.SETTINGS_PATH) + : path.join(__dirname, '..', 'settings.json'); +module.exports = { settingsPath }; diff --git a/config/settingsManager.js b/config/settingsManager.js index 84ce5ad..517ba57 100644 --- a/config/settingsManager.js +++ b/config/settingsManager.js @@ -17,7 +17,7 @@ let settingsCacheTime = 0; const CACHE_DURATION = 2000; // 2 detik // File system watcher untuk auto-reload settings -const settingsPath = path.join(__dirname, '../settings.json'); +const { settingsPath } = require('./paths'); let watcher = null; // Helper untuk baca settings.json secara dinamis diff --git a/routes/acsPortal.js b/routes/acsPortal.js index e7b0b5e..9766216 100644 --- a/routes/acsPortal.js +++ b/routes/acsPortal.js @@ -1318,7 +1318,7 @@ router.put('/api/servers/legacy', requireAdmin, express.json(), async (req, res) if (clearPassword) currentSettings.genieacs_password = ''; else if (String(passwordInput || '').trim()) currentSettings.genieacs_password = String(passwordInput || ''); - const settingsPath = path.join(__dirname, '../settings.json'); + const settingsPath = require('../config/paths').settingsPath; fs.writeFileSync(settingsPath, JSON.stringify(currentSettings, null, 2), 'utf8'); res.json({ success: true, message: 'Default ACS berhasil diperbarui.' }); diff --git a/routes/adminPortal.js b/routes/adminPortal.js index 5817810..3e9d00b 100644 --- a/routes/adminPortal.js +++ b/routes/adminPortal.js @@ -5234,7 +5234,7 @@ router.post('/api/genieacs/settings', requireAdmin, async (req, res) => { // Save to file const fs = require('fs'); const path = require('path'); - const settingsPath = path.join(__dirname, '../settings.json'); + const settingsPath = require('../config/paths').settingsPath; fs.writeFileSync(settingsPath, JSON.stringify(currentSettings, null, 2), 'utf8'); // Log audit diff --git a/routes/customerAPI.js b/routes/customerAPI.js index 4a1f361..9f3818b 100644 --- a/routes/customerAPI.js +++ b/routes/customerAPI.js @@ -2190,7 +2190,7 @@ router.post('/app/admin/settings/update', requireAdminApiAuth, (req, res) => { try { const allowed = ['company_header', 'company_subheader', 'company_phone', 'company_address', 'timezone', 'qris_enabled', 'auto_isolate_enabled', 'webhook_secret']; const updates = req.body || {}; - const settingsPath = require('path').join(__dirname, '../settings.json'); + const settingsPath = require('../config/paths').settingsPath; const current = JSON.parse(require('fs').readFileSync(settingsPath, 'utf8')); let changed = 0; for (const key of allowed) { diff --git a/services/backupService.js b/services/backupService.js index b8e9a42..2913e3a 100644 --- a/services/backupService.js +++ b/services/backupService.js @@ -11,7 +11,7 @@ const { getSetting, getCurrentDateInTimezone, getNowLocalISO } = require('../con const projectRoot = path.join(__dirname, '..'); const backupDir = path.join(projectRoot, 'backups'); const dbPath = path.join(projectRoot, 'database', 'billing.db'); -const settingsPath = path.join(projectRoot, 'settings.json'); +const { settingsPath } = require('../config/paths'); // Pastikan direktori backup ada if (!fs.existsSync(backupDir)) {