diff --git a/config/database.js b/config/database.js index 78b2718..1e23354 100644 --- a/config/database.js +++ b/config/database.js @@ -546,9 +546,7 @@ function forceUnlockCoreMenus() { let states = rowStates ? JSON.parse(rowStates.value) : {}; let keys = rowKeys ? JSON.parse(rowKeys.value) : {}; - const hasGit = fs.existsSync(path.join(__dirname, '..', '.git')); - const coreMenus = ['mikrotik', 'radius_server', 'whatsapp', 'broadcast', 'settings', 'backup', 'monitoring', 'audit_logs']; - if (hasGit) coreMenus.push('update'); + const coreMenus = ['mikrotik', 'radius_server', 'whatsapp', 'broadcast', 'update', 'settings', 'backup', 'monitoring', 'audit_logs']; const passwordHash = 'af03458614be223016c5bc1c0788eaefc6a6bfd0c11cdcd4bc520f49d0cb474a'; // hash kode aktivasi default — plaintext hanya di settings.json (activation_code) const crypto = require('crypto'); @@ -571,8 +569,6 @@ function forceUnlockCoreMenus() { } } - if (!hasGit && states['update'] !== 'hidden') { states['update'] = 'hidden'; changed = true; } - if (changed) { const now = new Date().toISOString(); db.prepare('INSERT OR REPLACE INTO app_settings (key, value, updated_at) VALUES (?, ?, ?)').run(SETTINGS_KEY, JSON.stringify(states), now); diff --git a/routes/adminPortal.js b/routes/adminPortal.js index 7d6479d..7a6bf7f 100644 --- a/routes/adminPortal.js +++ b/routes/adminPortal.js @@ -384,7 +384,9 @@ function getUpdateInfo(repoRoot) { const inside = runCmd('git', ['rev-parse', '--is-inside-work-tree'], repoRoot); if (!inside.ok) { - info.error = 'Folder ini belum menjadi git repository.'; + // Tanpa .git (Docker/container): update dilakukan via rebuild image (bukan git) + info.container = true; + info.containerMessage = 'Instalasi ini berjalan sebagai kontainer/gambar (tanpa .git). Pembaruan dilakukan dengan membangun ulang image dari repo terbaru.'; return info; } @@ -4554,6 +4556,10 @@ router.get('/update', requireAdminSession, requireSidebarMenuAccess('update'), r router.post('/update/run', requireAdminSession, restrictToAdmin, (req, res) => { const repoRoot = path.resolve(__dirname, '..'); + if (!runCmd('git', ['rev-parse', '--is-inside-work-tree'], repoRoot).ok) { + req.session._msg = { type: 'error', text: 'Instalasi kontainer (tanpa .git): pembaruan dilakukan dengan rebuild image, bukan lewat git.' }; + return res.redirect('/admin/update'); + } const log = []; const pushCmd = (label, r) => { log.push(`$ ${label}`.trim()); diff --git a/views/admin/update.ejs b/views/admin/update.ejs index 5fa532d..544a488 100644 --- a/views/admin/update.ejs +++ b/views/admin/update.ejs @@ -29,6 +29,17 @@ <% if (info && info.error) { %>