tududi/backend/modules/backup/routes.js
Chris 542be2c1e9
Fix bug 366 (#764)
* Optimize DB

* Clean up names

* fixup! Clean up names

* fixup! fixup! Clean up names
2026-01-07 18:18:07 +02:00

59 lines
1.7 KiB
JavaScript

'use strict';
const express = require('express');
const multer = require('multer');
const router = express.Router();
const backupController = require('./controller');
const checkBackupsEnabled = (req, res, next) => {
const backupsEnabled = process.env.FF_ENABLE_BACKUPS === 'true';
if (!backupsEnabled) {
return res.status(403).json({
error: 'Backups feature is disabled',
message:
'The backups feature is currently disabled. Please contact your administrator.',
});
}
next();
};
const upload = multer({
storage: multer.memoryStorage(),
limits: {
fileSize: 100 * 1024 * 1024,
},
fileFilter: (req, file, cb) => {
const allowedMimes = [
'application/json',
'application/gzip',
'application/x-gzip',
];
const fileExt = file.originalname.toLowerCase();
if (
allowedMimes.includes(file.mimetype) ||
fileExt.endsWith('.json') ||
fileExt.endsWith('.gz')
) {
cb(null, true);
} else {
cb(new Error('Only JSON and gzip files are allowed'), false);
}
},
});
router.use('/backup', checkBackupsEnabled);
router.post('/backup/export', backupController.export);
router.post('/backup/import', upload.single('backup'), backupController.import);
router.post(
'/backup/validate',
upload.single('backup'),
backupController.validate
);
router.get('/backup/list', backupController.list);
router.get('/backup/:uid/download', backupController.download);
router.post('/backup/:uid/restore', backupController.restore);
router.delete('/backup/:uid', backupController.delete);
module.exports = router;