ml-testing-toolkit 18.13.2 → 18.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/lib/config.js CHANGED
@@ -90,7 +90,6 @@ const loadSystemConfig = async (filename = SYSTEM_CONFIG_FILE) => {
90
90
  const systemConfigFromEnvironment = _getSystemConfigFromEnvironment()
91
91
  _.merge(SYSTEM_CONFIG, systemConfigFromEnvironment)
92
92
  const secretsFromEnvironment = _getSecretsFromEnvironment()
93
- console.log(secretsFromEnvironment)
94
93
  _.merge(SYSTEM_CONFIG, secretsFromEnvironment)
95
94
  } catch (err) {
96
95
  console.log(`Can not read the file ${filename}`, err)
@@ -98,22 +97,50 @@ const loadSystemConfig = async (filename = SYSTEM_CONFIG_FILE) => {
98
97
  return true
99
98
  }
100
99
 
100
+ const mask = value => (value && value.length > 4) ? `${value.slice(0, 2)}***${value.slice(-2)}` : value
101
+
101
102
  const _getSecretsFromEnvironment = () => {
102
103
  const secretsFromEnvironment = {}
103
- if (process.env.REPORTING_DB_CONNECTION_PASSWORD || process.env.REPORTING_DB_CONNECTION_STRING) {
104
+ if (
105
+ process.env.REPORTING_DB_CONNECTION_PASSWORD ||
106
+ process.env.REPORTING_DB_CONNECTION_STRING ||
107
+ process.env.REPORTING_DB_SSL_ENABLED ||
108
+ process.env.REPORTING_DB_SSL_VERIFY ||
109
+ process.env.REPORTING_DB_SSL_CA_FILE_PATH
110
+ ) {
104
111
  try {
105
112
  const reportingDbConnectionPassword = process.env.REPORTING_DB_CONNECTION_PASSWORD
106
113
  const reportingDbConnectionString = process.env.REPORTING_DB_CONNECTION_STRING
107
- console.log(`Retrieved reporting database password in environment '${process.env.REPORTING_DB_CONNECTION_PASSWORD}'`)
108
- console.log(`Retrieved reporting database connection string in environment '${process.env.REPORTING_DB_CONNECTION_STRING}'`)
114
+ const reportingDbSslEnabled = process.env.REPORTING_DB_SSL_ENABLED === 'true'
115
+ const reportingDbSslVerify = process.env.REPORTING_DB_SSL_VERIFY !== 'false'
116
+ const reportingDbSslCa = process.env.REPORTING_DB_SSL_CA_FILE_PATH
117
+
109
118
  secretsFromEnvironment.DB = {
110
119
  PASSWORD: reportingDbConnectionPassword,
111
120
  CONNECTION_STRING: reportingDbConnectionString
112
121
  }
113
- console.log(`Secrets retrieved from environment to be merged into system config ${secretsFromEnvironment}`)
122
+
123
+ if (
124
+ process.env.REPORTING_DB_SSL_ENABLED ||
125
+ process.env.REPORTING_DB_SSL_VERIFY ||
126
+ process.env.REPORTING_DB_SSL_CA_FILE_PATH
127
+ ) {
128
+ secretsFromEnvironment.DB.SSL_ENABLED = reportingDbSslEnabled
129
+ secretsFromEnvironment.DB.SSL_VERIFY = reportingDbSslVerify
130
+ if (reportingDbSslCa) {
131
+ secretsFromEnvironment.DB.SSL_CA_FILE_PATH = reportingDbSslCa
132
+ }
133
+ }
134
+
135
+ // Hide CA from being logged
136
+ const logSecrets = _.cloneDeep(secretsFromEnvironment)
137
+ if (logSecrets.DB && logSecrets.DB.SSL_CA_FILE_PATH) logSecrets.DB.SSL_CA_FILE_PATH = mask(logSecrets.DB.SSL_CA_FILE_PATH)
138
+ if (logSecrets.DB && logSecrets.DB.PASSWORD) logSecrets.DB.PASSWORD = mask(logSecrets.DB.PASSWORD)
139
+ if (logSecrets.DB && logSecrets.DB.CONNECTION_STRING) logSecrets.DB.CONNECTION_STRING = mask(logSecrets.DB.CONNECTION_STRING)
140
+ console.log('Secrets retrieved from environment to be merged into system config', logSecrets)
114
141
  } catch (err) {
115
142
  console.log(err)
116
- console.log('Failed to retrieve reporting database password or connection string in environment')
143
+ console.log('Failed to retrieve reporting database secrets or SSL/TLS settings from environment')
117
144
  }
118
145
  }
119
146
  return secretsFromEnvironment
@@ -46,6 +46,24 @@ const getConnection = async () => {
46
46
  params = {}
47
47
  }
48
48
  }
49
+
50
+ // TLS/SSL support
51
+ const mongoOptions = {
52
+ useNewUrlParser: true,
53
+ useUnifiedTopology: true
54
+ }
55
+
56
+ if (systemConfig.DB.SSL_ENABLED) {
57
+ mongoOptions.tls = true
58
+ if (typeof systemConfig.DB.SSL_VERIFY !== 'undefined') {
59
+ console.log(`SSL_VERIFY is set to ${systemConfig.DB.SSL_VERIFY} (type: ${typeof systemConfig.DB.SSL_VERIFY})`)
60
+ mongoOptions.tlsAllowInvalidCertificates = !systemConfig.DB.SSL_VERIFY
61
+ }
62
+ if (systemConfig.DB.SSL_CA_FILE_PATH) {
63
+ mongoOptions.tlsCAFile = systemConfig.DB.SSL_CA_FILE_PATH
64
+ }
65
+ }
66
+
49
67
  const csMongoDBObj = new ConnectionString()
50
68
  csMongoDBObj.setDefaults({
51
69
  protocol: 'mongodb',
@@ -59,10 +77,7 @@ const getConnection = async () => {
59
77
  const safeConnectionString = connectionString.replace(/(\/\/)(.*):(.*)@/, '$1****:****@')
60
78
  Logger.info(`Connecting to MongoDB with connection string: ${safeConnectionString}`)
61
79
 
62
- conn = await mongoDBWrapper.connect(connectionString, {
63
- useNewUrlParser: true,
64
- useUnifiedTopology: true
65
- })
80
+ conn = await mongoDBWrapper.connect(connectionString, mongoOptions)
66
81
  }
67
82
  return conn
68
83
  }
@@ -188,6 +203,13 @@ const getReport = async (reportId) => {
188
203
  return await MyModel.findById(reportId)
189
204
  }
190
205
 
206
+ const _deleteConn = async () => {
207
+ if (conn) {
208
+ await conn.disconnect()
209
+ conn = undefined
210
+ }
211
+ }
212
+
191
213
  module.exports = {
192
214
  read,
193
215
  find,
@@ -195,5 +217,6 @@ module.exports = {
195
217
  remove,
196
218
  upsertReport,
197
219
  listReports,
198
- getReport
220
+ getReport,
221
+ _deleteConn
199
222
  }