sawa-control-panel/backend/routes/vhosts.js

84 lines
2.4 KiB
JavaScript

const express = require('express');
const vhostService = require('../services/vhostService');
const router = express.Router();
const validateFilename = (req, res, next) => {
const { filename } = req.params;
if (!/^[a-zA-Z0-9._-]+$/.test(filename) || filename.includes('..') || filename.includes('/')) {
return res.status(400).json({ success: false, error: 'Invalid filename' });
}
next();
};
/**
* GET /api/v1/vhosts
*/
router.get('/', (req, res) => {
try {
const vhosts = vhostService.listVHosts();
res.json({ success: true, vhosts });
} catch (err) {
res.status(500).json({ success: false, error: err.message });
}
});
/**
* POST /api/v1/vhosts
* Creates a new virtual host configuration.
*/
router.post('/', (req, res) => {
try {
const { domain, root, port, type } = req.body;
if (!domain || !root || !port || !type) {
return res.status(400).json({ success: false, error: 'Missing required fields (domain, root, port, type)' });
}
const filename = vhostService.createVHost(domain, root, port, type);
res.json({ success: true, filename });
} catch (err) {
res.status(500).json({ success: false, error: err.message });
}
});
/**
* POST /api/v1/vhosts/:filename/enable
*/
router.post('/:filename/enable', validateFilename, (req, res) => {
try {
const { filename } = req.params;
const newFilename = vhostService.toggleVHost(filename, true);
vhostService.reloadNginx();
res.json({ success: true, filename: newFilename });
} catch (err) {
res.status(500).json({ success: false, error: err.message });
}
});
/**
* POST /api/v1/vhosts/:filename/disable
*/
router.post('/:filename/disable', validateFilename, (req, res) => {
try {
const { filename } = req.params;
const newFilename = vhostService.toggleVHost(filename, false);
vhostService.reloadNginx();
res.json({ success: true, filename: newFilename });
} catch (err) {
res.status(500).json({ success: false, error: err.message });
}
});
/**
* POST /api/v1/vhosts/reload
*/
router.post('/reload', (req, res) => {
try {
vhostService.reloadNginx();
res.json({ success: true });
} catch (err) {
res.status(500).json({ success: false, error: err.message });
}
});
module.exports = router;