Files
bruno/tests/ssl/custom-ca-certs/server/index.js
2025-12-04 01:37:20 +05:30

74 lines
1.7 KiB
JavaScript

#!/usr/bin/env node
const path = require('node:path');
const fs = require('node:fs');
const https = require('node:https');
const { killProcessOnPort } = require('./helpers/platform');
function createServer(certsDir, port = 8090) {
const serverOptions = {
key: fs.readFileSync(path.join(certsDir, 'localhost-key.pem')),
cert: fs.readFileSync(path.join(certsDir, 'localhost-cert.pem')),
ca: fs.readFileSync(path.join(certsDir, 'ca-cert.pem'))
};
const server = https.createServer(serverOptions, (req, res) => {
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
res.end('helloworld');
});
return new Promise((resolve, reject) => {
server.listen(port, (error) => {
if (error) {
reject(error);
} else {
resolve(server);
}
});
});
}
function shutdownServer(server, cleanup) {
const shutdown = (signal) => {
console.log(`🛑 Received ${signal}, shutting down`);
if (cleanup) cleanup();
if (server) {
server.close(() => process.exit(0));
} else {
process.exit(0);
}
};
process.on('SIGINT', () => shutdown('SIGINT'));
process.on('SIGTERM', () => shutdown('SIGTERM'));
}
async function startServer() {
const certsDir = path.join(__dirname, 'certs');
const port = 8090;
console.log('🚀 Starting HTTPS test server');
try {
killProcessOnPort(port);
console.log(`🌐 Creating server on port ${port}`);
const server = await createServer(certsDir, port);
shutdownServer(server, () => {
console.log('✨ Server cleanup completed');
});
} catch (error) {
console.error('❌ Server startup failed:', error.message);
process.exit(1);
}
}
if (require.main === module) {
startServer();
}
module.exports = { startServer };