node-http-server

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 5  →  ?path2? @ 6
/package.json
@@ -5,14 +5,15 @@
"main": "server.js",
"author": "[Wizardry and Steamworks]:Support",
"license": "GPL-3.0",
"repository" : {
"repository": {
"type": "svn",
"url" : "http://svn.grimore.org/node-http-server"
"url": "http://svn.grimore.org/node-http-server"
},
"dependencies": {
"http-auth": "^3.1.3",
"mime": "^1.3.4",
"moment": "^2.17.1",
"node-forge": "^0.7.0",
"winston": "^2.3.1",
"yargs": "^7.0.1"
}
/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);