-
Notifications
You must be signed in to change notification settings - Fork 73.1k
Expand file tree
/
Copy pathinstance.js
More file actions
98 lines (73 loc) · 2.77 KB
/
instance.js
File metadata and controls
98 lines (73 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
'use strict';
const fs = require('fs')
, path = require('path')
, language = require('../../../lib/language')()
, apiRoot = require('../../../lib/api/root')
, http = require('http')
, https = require('https')
;
function configure () {
const self = { };
self.prepareEnv = function prepareEnv({ apiSecret, useHttps, authDefaultRoles, enable }) {
if (useHttps) {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
}
else {
process.env.INSECURE_USE_HTTP = true;
}
process.env.API_SECRET = apiSecret;
process.env.HOSTNAME = 'localhost';
const env = require('../../../lib/server/env')();
if (useHttps) {
env.ssl = {
key: fs.readFileSync(path.join(__dirname, '../localhost.key')),
cert: fs.readFileSync(path.join(__dirname, '../localhost.crt'))
};
}
env.settings.authDefaultRoles = authDefaultRoles;
env.settings.enable = enable;
return env;
};
/*
* Create new web server instance for testing purposes
*/
self.create = function createHttpServer ({
apiSecret = 'this is my long pass phrase',
useHttps = true,
authDefaultRoles = '',
enable = ['careportal', 'api']
}) {
return new Promise(function (resolve, reject) {
try {
let instance = { },
hasBooted = false
;
instance.env = self.prepareEnv({ apiSecret, useHttps, authDefaultRoles, enable });
self.wares = require('../../../lib/middleware/')(instance.env);
instance.app = require('express')();
instance.app.enable('api');
require('../../../lib/server/bootevent')(instance.env, language).boot(function booted (ctx) {
instance.ctx = ctx;
instance.ctx.ddata = require('../../../lib/data/ddata')();
instance.ctx.apiRootApp = apiRoot(instance.env, ctx);
instance.app.use('/api', instance.ctx.apiRootApp);
const transport = useHttps ? https : http;
instance.server = transport.createServer(instance.env.ssl || { }, instance.app).listen(0);
instance.env.PORT = instance.server.address().port;
instance.baseUrl = `${useHttps ? 'https' : 'http'}://${instance.env.HOSTNAME}:${instance.env.PORT}`;
console.log(`Started ${useHttps ? 'SSL' : 'HTTP'} instance on ${instance.baseUrl}`);
hasBooted = true;
resolve(instance);
});
setTimeout(function watchDog() {
if (!hasBooted)
reject('timeout');
}, 30000);
} catch (err) {
reject(err);
}
});
};
return self;
}
module.exports = configure();