/
common.js
76 lines (65 loc) · 2.27 KB
/
common.js
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
const _ = require('lodash');
const fs = require('fs');
const { getJWTKeys } = require('./jwtHelper');
const path = require('path');
var options = {};
const getOptions = () => options;
const _getValueFromString = strVal => {
try {
return JSON.parse(strVal);
} catch {
return strVal;
}
};
const getArgs = args => {
const myArgs = {};
for (i = 0; i < args.length; i++) {
const currentArg = args[i];
const nextArg = i < args.length - 1 ? args[i + 1] : null;
if (currentArg.indexOf('-') === 0) {
const key = _.trimStart(currentArg, '-');
if (nextArg && nextArg.indexOf('-') !== 0) {
const value = _getValueFromString(nextArg);
myArgs[key] = value;
i++;
} else {
myArgs[key] = true;
}
}
}
return myArgs;
};
const getPrintableString = obj => {
return _(obj)
.keys()
.map(key => {
const item = _.get(obj, key);
return item
? `${key}: ${_.isObjectLike(item) ? getPrintableString(item) : item}`
: '';
})
.compact()
.join('\r\n')
.valueOf();
};
const populateOptions = async () => {
const args = getArgs(process.argv.slice(2));
options = {};
options.port = args.p || args.port || 3000;
options.skipLogin = args.sl || args.skipLogin || false;
options.idField = args.id || args.idField || 'sub';
options.connectionKey = args.conn || args.connKey || 'connection';
const userFilePath = args.user || args.u;
if (userFilePath) options.users = path.resolve(userFilePath);
options.sslKey = args.sslKey;
options.sslCert = args.sslCert;
if (!options.sslKey && !!args.keyFile) {
options.sslKey = fs.readFileSync(args.keyFile);
options.sslCert = fs.readFileSync(args.certFile);
}
options.keys = await getJWTKeys(args.pvtk || args.privateKey, args.pubk || args.publicKey);
options.ssl = options.sslKey && options.sslCert;
options.useRedis = args.ur || args.redis || args.useRedis;
return Promise.resolve(options);
}
module.exports = { getOptions, populateOptions, getPrintableString };