59 lines
1.7 KiB
JavaScript
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;
|