feat: aggiunta ricerca spudorata. progress: ripreso con il tentativo di invio delle mail che non creino nuovi ticket

This commit is contained in:
VVER440 committed 2026-08-25 23:24:48 +02:00
1 parent 3650bf5790
commit 8d24759a15
18 files changed
+1661 -98

No files matched your search

+147
View File
@@ -0,0 +1,147 @@
const express = require('express');
const router = express.Router();
const fs = require('fs');
const path = require('path');
const { db, logAttivita } = require('../activityDb');
const pool = require('../db');
const baseDir = process.pkg ? path.dirname(process.execPath) : path.resolve(__dirname, '..');
const envPath = fs.existsSync(path.resolve(baseDir, '.env'))
? path.resolve(baseDir, '.env')
: path.resolve(__dirname, '..', '.env');
// Helper to resolve agent name from DB
async function resolveAgentName(agentId) {
try {
const r = await pool.query(
`SELECT first_name, last_name, login FROM users WHERE id = $1`,
[agentId]
);
if (r.rows.length > 0) {
const u = r.rows[0];
return (u.first_name || '') + ' ' + (u.last_name || '') || u.login || `Agent #${agentId}`;
}
} catch (_) { /* ignore */ }
return `Agent #${agentId}`;
}
// GET /api/config/env — Read current .env file and history
router.get('/env', async (req, res) => {
try {
let content = '';
if (fs.existsSync(envPath)) {
content = fs.readFileSync(envPath, 'utf8');
}
const history = db.prepare(`
SELECT * FROM env_history ORDER BY id DESC LIMIT 100
`).all();
res.json({ content, history });
} catch (err) {
console.error('Error reading env config:', err);
res.status(500).json({ error: 'Errore durante la lettura del file .env', message: err.message });
}
});
// POST /api/config/env — Save updated .env content and create snapshot in SQLite
router.post('/env', async (req, res) => {
try {
const { content, note } = req.body;
const operatorId = parseInt(req.headers['x-agent-id'] || '1', 10);
const agentName = await resolveAgentName(operatorId);
if (typeof content !== 'string') {
return res.status(400).json({ error: 'Il contenuto del file .env è obbligatorio' });
}
// If history is empty and current .env exists, create an initial baseline snapshot
const countRow = db.prepare('SELECT COUNT(*) AS count FROM env_history').get();
if (countRow.count === 0 && fs.existsSync(envPath)) {
const initialContent = fs.readFileSync(envPath, 'utf8');
db.prepare(`
INSERT INTO env_history (agent_id, agent_name, content, note)
VALUES (?, ?, ?, ?)
`).run(operatorId, agentName, initialContent, 'Baseline iniziale preesistente');
}
// Write updated content to disk
fs.writeFileSync(envPath, content, 'utf8');
// Save snapshot in history table
const info = db.prepare(`
INSERT INTO env_history (agent_id, agent_name, content, note)
VALUES (?, ?, ?, ?)
`).run(operatorId, agentName, content, note || 'Modifica manuale .env');
logAttivita({
agente_id: operatorId,
agente_nome: agentName,
titolo_azione: 'Modifica .env',
azione: { note: note || 'Modifica manuale .env', history_id: info.lastInsertRowid },
esito: 'successo',
});
const history = db.prepare(`
SELECT * FROM env_history ORDER BY id DESC LIMIT 100
`).all();
res.json({
success: true,
message: 'File .env aggiornato e salvato nello storico locale con successo!',
history_id: info.lastInsertRowid,
history,
});
} catch (err) {
console.error('Error saving .env config:', err);
res.status(500).json({ error: 'Errore durante il salvataggio del file .env', message: err.message });
}
});
// POST /api/config/env/restore/:history_id — Restore a previous .env snapshot
router.post('/env/restore/:history_id', async (req, res) => {
try {
const { history_id } = req.params;
const operatorId = parseInt(req.headers['x-agent-id'] || '1', 10);
const agentName = await resolveAgentName(operatorId);
const record = db.prepare('SELECT * FROM env_history WHERE id = ?').get(history_id);
if (!record) {
return res.status(404).json({ error: 'Versione di storico non trovata' });
}
// Write snapshot content to disk
fs.writeFileSync(envPath, record.content, 'utf8');
// Insert new history record documenting the restore operation
const restoreNote = `Ripristinato alla versione #${record.id} del ${record.created_at}`;
const info = db.prepare(`
INSERT INTO env_history (agent_id, agent_name, content, note)
VALUES (?, ?, ?, ?)
`).run(operatorId, agentName, record.content, restoreNote);
logAttivita({
agente_id: operatorId,
agente_nome: agentName,
titolo_azione: 'Ripristino .env',
azione: { restored_from_id: record.id, new_history_id: info.lastInsertRowid },
esito: 'successo',
});
const history = db.prepare(`
SELECT * FROM env_history ORDER BY id DESC LIMIT 100
`).all();
res.json({
success: true,
message: `Versione #${record.id} ripristinata con successo!`,
content: record.content,
history,
});
} catch (err) {
console.error('Error restoring .env version:', err);
res.status(500).json({ error: 'Errore durante il ripristino della versione .env', message: err.message });
}
});
module.exports = router;