Migração para PostgreSQL multi-driver + correções de segurança
- Camada de banco unificada (src/database.js): drivers Postgres/Firebird, tradutor de SQL, suporte a schema e pool de conexões - Conexões: novo_local (Postgres externo) e firebird_local (legado) - Tela de rotas da API redesenhada (auth, params, exemplos de body) - Correções de segurança (críticos/altos/médios/baixos): XSS no chat, escalonamento de privilégio, mídia autenticada, SQL restrito a gerente, JWT sem fallback + issuer, IDOR em conversas, CORS por allowlist, rate-limit no login, limites de corpo por rota - Deploy alinhado: install.sh grava .env com PG_*, migracoes.js driver-aware Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
// Dark Mode Controller - Only handles initialization/persistence
|
||||
(function() {
|
||||
if (typeof window.darkModeToggle !== 'function') {
|
||||
// Ensure function exists (inline script in head should have defined it)
|
||||
window.darkModeToggle = function() {
|
||||
var el = document.body;
|
||||
if (!el) return;
|
||||
var isDark = localStorage.getItem('chatc2_dark_mode') === 'true';
|
||||
var enable = !isDark;
|
||||
el.classList.toggle('dark-mode', enable);
|
||||
localStorage.setItem('chatc2_dark_mode', enable ? 'true' : 'false');
|
||||
document.querySelectorAll('.dark-mode-toggle').forEach(function(btn) {
|
||||
btn.innerHTML = enable ? '☀️ Claro' : '🌙 Escuro';
|
||||
});
|
||||
};
|
||||
window.darkModeApply = function(enable) {
|
||||
var el = document.body;
|
||||
if (!el) return;
|
||||
el.classList.toggle('dark-mode', enable);
|
||||
localStorage.setItem('chatc2_dark_mode', enable ? 'true' : 'false');
|
||||
document.querySelectorAll('.dark-mode-toggle').forEach(function(btn) {
|
||||
btn.innerHTML = enable ? '☀️ Claro' : '🌙 Escuro';
|
||||
});
|
||||
};
|
||||
window.darkModeIsDark = function() { return localStorage.getItem('chatc2_dark_mode') === 'true'; };
|
||||
}
|
||||
|
||||
// Apply on load
|
||||
if (localStorage.getItem('chatc2_dark_mode') === 'true') {
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.body.classList.add('dark-mode');
|
||||
document.querySelectorAll('.dark-mode-toggle').forEach(function(btn) {
|
||||
btn.innerHTML = '☀️ Claro';
|
||||
});
|
||||
});
|
||||
} else {
|
||||
document.body.classList.add('dark-mode');
|
||||
document.querySelectorAll('.dark-mode-toggle').forEach(function(btn) {
|
||||
btn.innerHTML = '☀️ Claro';
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user