84 lines
2.4 KiB
JavaScript
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;
|