acha-framework
Version:
is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...
71 lines • 2.23 kB
JavaScript
(function (undefined) {
Ioc.define('backend.ssl', [
'backend.configuration',
'backend.logHelper'
], function (provide, config, logHelper) {
const pem = require('pem');
const ensureAutoCertificate = function () {
return Q.Promise(function (resolve, reject) {
try {
if (config.backend.ssl === true) {
config.backend.ssl = {
key: 'certificates/server_key',
cert: 'certificates/server_cert',
port: 8080
};
}
const data = {
server_key: PATH.resolve(config.rootDirectory, config.backend.ssl.key),
server_cert: PATH.resolve(config.rootDirectory, config.backend.ssl.cert)
};
if (FS.existsSync(data.server_key)) {
resolve(data);
} else {
pem.createCertificate({
days: 365,
selfSigned: true
}, function (err, keys) {
FSX.outputFileSync(data.server_key, keys.serviceKey);
FSX.outputFileSync(data.server_cert, keys.certificate);
resolve(data);
});
}
} catch (e) {
logHelper.log(e);
reject(e);
}
});
};
const readCertificate = function (data) {
return Q.Promise(function (resolve, reject) {
try {
const privateKey = FSX.readFileSync(data.server_key, 'utf8');
const certificate = FSX.readFileSync(data.server_cert, 'utf8');
const credentials = {
key: privateKey,
cert: certificate
};
resolve(credentials);
} catch (e) {
logHelper.log(e);
reject(e);
}
});
};
provide(function (app) {
'use strict';
return Q.Promise(function (resolve, reject) {
ensureAutoCertificate().then(readCertificate).then(function (credentials) {
try {
const https = require('https');
https.createServer(credentials, app).listen(config.backend.ssl.port);
resolve();
} catch (e) {
logHelper.log(e);
reject(e);
}
}).catch(reject);
});
});
});
}());