/server.js |
@@ -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: [ |
@@ -71,11 +112,12 @@ |
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); |