adonis-mongorito
adonis-mongorito copied to clipboard
Support for SSL options
I needed to set up a connection to mongo using the SSL options to authenticate. Based on options available from http://mongodb.github.io/node-mongodb-native/2.2/tutorials/connect/ssl/ here's how i've done it:
Relevant .env part:
MONGO_HOST=localhost
MONGO_PORT=27017
MONGO_USER=root
MONGO_PASS=123456
MONGO_DATABASE=test
MONGO_VERIFY_HOSTNAME=false
MONGO_SSL=true
MONGO_CRT=/etc/ssl/certs/mongo-pem
MONGO_KEY=/etc/ssl/certs/mongo-pem
MONGO_CA=/etc/ssl/certs/mongo-ca
All config/mongo.js:
'use strict'
const fs = require('fs')
const Env = use('Env')
let ssl = Env.get('MONGO_SSL', false);
let crt = Env.get('MONGO_CRT', '');
let key = Env.get('MONGO_KEY', '');
let ca = Env.get('MONGO_CA', '');
if (ssl) {
if (crt && fs.existsSync(crt)) {
crt = fs.readFileSync(crt)
}
if (key && fs.existsSync(key)) {
key = fs.readFileSync(key)
}
if (ca && fs.existsSync(ca)) {
ca = [fs.readFileSync(ca)]
}
}
module.exports = {
host: Env.get('MONGO_HOST'),
port: Env.get('MONGO_PORT'),
user: Env.get('MONGO_USER', ''),
pass: Env.get('MONGO_PASS', ''),
db: Env.get('MONGO_DATABASE'),
verify: Env.get('MONGO_VERIFY_HOSTNAME', false),
ssl: ssl,
crt: crt,
key: key,
ca: ca
}
and I had to change MongoritoProvider.js file, MongoritoProvider class declaration only:
class MongoritoProvider extends ServiceProvider {
* register () {
this.app.singleton('Adonis/Addons/MongoritoModel', function (app) {
let Config = app.use('Adonis/Src/Config')
const mongoHost = Config.get('mongo.host')
const mongoPort = Config.get('mongo.port')
const mongoUser = Config.get('mongo.user')
const mongoPass = Config.get('mongo.pass')
let mongoDb = Config.get('mongo.db')
let mongoVerify = Config.get('mongo.verify')
let mongoSSL = Config.get('mongo.ssl')
let mongoKey = Config.get('mongo.key')
let mongoCrt = Config.get('mongo.crt')
let mongoCa = Config.get('mongo.ca')
let options = { server: {} }
if (mongoSSL) {
mongoDb = `${mongoDb}?ssl=true`
options.server.sslValidate = true;
options.server.sslKey = mongoKey;
options.server.sslCert = mongoCrt;
options.server.sslCA = mongoCa;
}
options.server.checkServerIdentity = mongoVerify;
const connectUri = `${mongoHost}:${mongoPort}/${mongoDb}`
const connectionString = (mongoUser !== '' || mongoPass !== '') ? `${mongoUser}:${mongoPass}@${connectUri}` : connectUri
logger.verbose('connection string %s', connectionString)
Mongorito.connect(connectionString, options)
return MongoritoModel
})
}
}
I don't wanna lose my changes on the MongoritoProvider next time I run npm update
. So how can we arranged so this gets fixed? Do I submit a PR? Or would you change it?
@duartealexf you can submit a PR. I will test it, and merge if its ok :)