feat: consolidate backend improvements, frontend UX fixes and Wasabi storage support

This commit is contained in:
VPS 4 Deploy Agent
2026-05-30 15:23:27 +02:00
parent de3bbc9564
commit 6dfce6723b
21 changed files with 2312 additions and 361 deletions
+36 -4
View File
@@ -4,6 +4,7 @@ const db = require('../database');
const { verifyPassword } = require('../auth');
const fs = require('fs').promises;
const path = require('path');
const storage = require('../storage');
// ================================================================
// DELETE /api/system/factory-reset - Limpar sistema inteiro
@@ -110,6 +111,18 @@ router.get('/storage-config', async (req, res) => {
}
});
// ================================================================
// GET /api/system/wasabi-status - Retorna status em tempo real
// ================================================================
router.get('/wasabi-status', (req, res) => {
try {
const status = storage.getWasabiStatus();
res.json(status);
} catch (error) {
res.status(500).json({ error: 'Erro ao verificar status do Wasabi.' });
}
});
// ================================================================
// POST /api/system/storage-config - Salvar configurações de armazenamento
// ================================================================
@@ -139,12 +152,31 @@ router.post('/storage-config', async (req, res) => {
}
}
const finalAccessKey = wasabiAccessKey.trim();
const finalBucket = wasabiBucket.trim();
const finalRegion = (wasabiRegion || 'us-east-1').trim();
const finalEndpoint = (wasabiEndpoint || 's3.wasabisys.com').trim();
// 1. Validar as credenciais contra os servidores do Wasabi ANTES de salvar
const validation = await storage.validateCredentials(
finalAccessKey,
finalSecret,
finalBucket,
finalRegion,
finalEndpoint
);
if (!validation.valid) {
return res.status(400).json({ error: validation.message });
}
// 2. Se for válido, salvar no banco
const configJson = JSON.stringify({
wasabiAccessKey: wasabiAccessKey.trim(),
wasabiAccessKey: finalAccessKey,
wasabiSecretKey: finalSecret,
wasabiBucket: wasabiBucket.trim(),
wasabiRegion: (wasabiRegion || 'us-east-1').trim(),
wasabiEndpoint: (wasabiEndpoint || 's3.wasabisys.com').trim()
wasabiBucket: finalBucket,
wasabiRegion: finalRegion,
wasabiEndpoint: finalEndpoint
});
await db.run(`