node-http-server

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 5  →  ?path2? @ 6
/server.js
@@ -1,5 +1,5 @@
#!/usr/bin/env node
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3 //
///////////////////////////////////////////////////////////////////////////
 
@@ -13,6 +13,7 @@
const moment = require('moment');
const winston = require('winston');
const yargs = require('yargs');
const forge = require('node-forge');
 
// Get command-line arguments.
const argv = yargs
@@ -36,6 +37,46 @@
rootPath.every((e, i) => e === userPath[i]);
}
 
function generateCertificates(name, domain) {
// Generate 1024-bit key-pair.
var keys = forge.pki.rsa.generateKeyPair(1024);
// Create self-signed certificate.
var cert = forge.pki.createCertificate();
cert.publicKey = keys.publicKey;
cert.validity.notBefore = new Date();
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);
cert.setSubject([
{
name: 'commonName',
value: domain
},
{
name: 'organizationName',
value: name
}
]);
cert.setIssuer([
{
name: 'commonName',
value: name
},
{
name: 'organizationName',
value: name
}
]);
 
// Self-sign certificate.
cert.sign(keys.privateKey);
 
// Return PEM-format keys and certificates.
return {
privateKey: forge.pki.privateKeyToPem(keys.privateKey),
publicKey: forge.pki.publicKeyToPem(keys.publicKey),
certificate: forge.pki.certificateToPem(cert)
};
}
 
// Create various logging mechanisms.
const log = new winston.Logger({
transports: [
@@ -70,12 +111,13 @@
realm: "was",
file: path.resolve(__dirname, config.password_file)
});
const certs = generateCertificates("was", 'localhost');
 
// HTTPs server using digest authentication.
https.createServer(authentication, {
key: fs.readFileSync(path.resolve(__dirname, config.key)),
cert: fs.readFileSync(path.resolve(__dirname, config.certificate)),
ca: fs.readFileSync(path.resolve(__dirname, config.ca)),
key: certs.privateKey,
cert: certs.certificate,
}, (request, response) => {
const requestAddress = request.socket.address();
const requestedURL = url.parse(request.url, true);