diff --git a/packages/pg-connection-string/index.js b/packages/pg-connection-string/index.js index 65951c374..c07b146a9 100644 --- a/packages/pg-connection-string/index.js +++ b/packages/pg-connection-string/index.js @@ -81,6 +81,25 @@ function parse(str) { config.ssl.ca = fs.readFileSync(config.sslrootcert).toString() } + switch (config.sslmode) { + case 'disable': { + config.ssl = false + break + } + case 'prefer': + case 'require': + case 'verify-ca': + case 'verify-full': { + config.ssl = config.ssl || true + break + } + case 'no-verify': { + config.ssl = config.ssl || {} + config.ssl.rejectUnauthorized = false + break + } + } + return config } diff --git a/packages/pg-connection-string/test/parse.js b/packages/pg-connection-string/test/parse.js index 035b025d1..9a88f1d09 100644 --- a/packages/pg-connection-string/test/parse.js +++ b/packages/pg-connection-string/test/parse.js @@ -241,6 +241,52 @@ describe('parse', function () { }) }) + it('configuration parameter sslmode=no-verify', function () { + var connectionString = 'pg:///?sslmode=no-verify' + var subject = parse(connectionString) + subject.ssl.should.eql({ + rejectUnauthorized: false, + }) + }) + + it('configuration parameter sslmode=disable', function () { + var connectionString = 'pg:///?sslmode=disable' + var subject = parse(connectionString) + subject.ssl.should.eql(false) + }) + + it('configuration parameter sslmode=prefer', function () { + var connectionString = 'pg:///?sslmode=prefer' + var subject = parse(connectionString) + subject.ssl.should.eql(true) + }) + + it('configuration parameter sslmode=require', function () { + var connectionString = 'pg:///?sslmode=require' + var subject = parse(connectionString) + subject.ssl.should.eql(true) + }) + + it('configuration parameter sslmode=verify-ca', function () { + var connectionString = 'pg:///?sslmode=verify-ca' + var subject = parse(connectionString) + subject.ssl.should.eql(true) + }) + + it('configuration parameter sslmode=verify-full', function () { + var connectionString = 'pg:///?sslmode=verify-full' + var subject = parse(connectionString) + subject.ssl.should.eql(true) + }) + + it("configuration parameter sslmode=require doesn't overwrite sslrootcert=/path/to/ca", function () { + var connectionString = 'pg:///?sslrootcert=' + __dirname + '/example.ca&sslmode=require' + var subject = parse(connectionString) + subject.ssl.should.eql({ + ca: 'example ca\n', + }) + }) + it('allow other params like max, ...', function () { var subject = parse('pg://myhost/db?max=18&min=4') subject.max.should.equal('18')