Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
initializeFilter(client, context, callback) {
const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID;
const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY;
let mongodbClientEncryption;
try {
mongodbClientEncryption = require('mongodb-client-encryption').extension(mongodb);
} catch (e) {
// Do Nothing
}
this.enabled = !!(AWS_ACCESS_KEY_ID && AWS_SECRET_ACCESS_KEY && mongodbClientEncryption);
// Adds these fields onto the context so that they can be reused by tests
context.clientSideEncryption = {
enabled: this.enabled,
mongodbClientEncryption,
AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY
};
callback();
}
}
// setup for client side encryption
let AutoEncrypter;
try {
require.resolve('mongodb-client-encryption');
} catch (err) {
callback(
new MongoError(
'Auto-encryption requested, but the module is not installed. Please add `mongodb-client-encryption` as a dependency of your project'
)
);
return;
}
try {
AutoEncrypter = require('mongodb-client-encryption')(require('../../index')).AutoEncrypter;
} catch (err) {
callback(err);
return;
}
const mongoCryptOptions = Object.assign({}, options.autoEncryption);
topology.s.options.autoEncrypter = new AutoEncrypter(mongoClient, mongoCryptOptions);
topology.s.options.autoEncrypter.init(err => {
if (err) return callback(err, null);
callback(null, topology);
});
});
}
topology.connect(options, (err, newTopology) => {
if (err) {
topology.close(true);
return callback(err);
}
assignTopology(mongoClient, newTopology);
if (options.autoEncryption == null) {
callback(null, newTopology);
return;
}
// setup for client side encryption
let AutoEncrypter;
try {
AutoEncrypter = require('mongodb-client-encryption').AutoEncrypter;
} catch (err) {
callback(
new MongoError(
'Auto-encryption requested, but the module is not installed. Please add `mongodb-client-encryption` as a dependency of your project'
)
);
return;
}
const MongoClient = loadClient();
let connectionString;
if (options.autoEncryption.extraOptions && options.autoEncryption.extraOptions.mongocryptURI) {
connectionString = options.autoEncryption.extraOptions.mongocryptURI;
} else if (os.platform() === 'win32') {
connectionString = 'mongodb://localhost:27020/?serverSelectionTimeoutMS=1000';
} catch (err) {
callback(
new MongoError(
'Auto-encryption requested, but the module is not installed. Please add `mongodb-client-encryption` as a dependency of your project'
)
);
return;
}
try {
let mongodbClientEncryption = require('mongodb-client-encryption');
if (typeof mongodbClientEncryption.extension !== 'function') {
throw new MongoError(
'loaded version of `mongodb-client-encryption` does not have property `extension`. Please make sure you are loading the correct version of `mongodb-client-encryption`'
);
}
AutoEncrypter = mongodbClientEncryption.extension(require('../../index')).AutoEncrypter;
} catch (err) {
callback(err);
return;
}
const mongoCryptOptions = Object.assign({}, options.autoEncryption);
topology.s.options.autoEncrypter = new AutoEncrypter(mongoClient, mongoCryptOptions);
topology.s.options.autoEncrypter.init(err => {
if (err) return callback(err, null);
callback(null, topology);
});
});
}
} catch (err) {
callback(
new MongoError(
'Auto-encryption requested, but the module is not installed. Please add `mongodb-client-encryption` as a dependency of your project'
)
);
return;
}
try {
let mongodbClientEncryption = require('mongodb-client-encryption');
if (typeof mongodbClientEncryption.extension !== 'function') {
throw new MongoError(
'loaded version of `mongodb-client-encryption` does not have property `extension`. Please make sure you are loading the correct version of `mongodb-client-encryption`'
);
}
AutoEncrypter = mongodbClientEncryption.extension(require('../../index')).AutoEncrypter;
} catch (err) {
callback(err);
return;
}
const mongoCryptOptions = Object.assign({}, options.autoEncryption);
topology.s.options.autoEncrypter = new AutoEncrypter(mongoClient, mongoCryptOptions);
topology.s.options.autoEncrypter.init(err => {
if (err) return callback(err, null);
callback(null, topology);
});
});
}