Skip to content

Commit 70cf4dc

Browse files
authored
Merge pull request #2198 from brianc/benhjames-bhsj/noverify
Add no-verify ssl option
2 parents 2b7e4b9 + 7929f6a commit 70cf4dc

File tree

3 files changed

+49
-24
lines changed

3 files changed

+49
-24
lines changed

packages/pg/lib/connection-parameters.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var val = function (key, config, envVar) {
2525
return config[key] || envVar || defaults[key]
2626
}
2727

28-
var useSsl = function () {
28+
var readSSLConfigFromEnvironment = function () {
2929
switch (process.env.PGSSLMODE) {
3030
case 'disable':
3131
return false
@@ -34,6 +34,8 @@ var useSsl = function () {
3434
case 'verify-ca':
3535
case 'verify-full':
3636
return true
37+
case 'no-verify':
38+
return { rejectUnauthorized: false }
3739
}
3840
return defaults.ssl
3941
}
@@ -68,7 +70,14 @@ var ConnectionParameters = function (config) {
6870
})
6971

7072
this.binary = val('binary', config)
71-
this.ssl = typeof config.ssl === 'undefined' ? useSsl() : config.ssl
73+
74+
this.ssl = typeof config.ssl === 'undefined' ? readSSLConfigFromEnvironment() : config.ssl
75+
76+
// support passing in ssl=no-verify via connection string
77+
if (this.ssl === 'no-verify') {
78+
this.ssl = { rejectUnauthorized: false }
79+
}
80+
7281
this.client_encoding = val('client_encoding', config)
7382
this.replication = val('replication', config)
7483
// a domain socket begins with '/'

packages/pg/test/unit/client/configuration-tests.js

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict'
22
require(__dirname + '/test-helper')
3+
var assert = require('assert')
34

45
var pguser = process.env['PGUSER'] || process.env.USER
56
var pgdatabase = process.env['PGDATABASE'] || process.env.USER

packages/pg/test/unit/connection-parameters/environment-variable-tests.js

+37-22
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict'
22
var helper = require(__dirname + '/../test-helper')
3+
const Suite = require('../../suite')
4+
35
var assert = require('assert')
46
var ConnectionParameters = require(__dirname + '/../../../lib/connection-parameters')
57
var defaults = require(__dirname + '/../../../lib').defaults
@@ -11,7 +13,17 @@ for (var key in process.env) {
1113
delete process.env[key]
1214
}
1315

14-
test('ConnectionParameters initialized from environment variables', function (t) {
16+
const suite = new Suite('ConnectionParameters')
17+
18+
const clearEnv = () => {
19+
// clear process.env
20+
for (var key in process.env) {
21+
delete process.env[key]
22+
}
23+
}
24+
25+
suite.test('ConnectionParameters initialized from environment variables', function () {
26+
clearEnv()
1527
process.env['PGHOST'] = 'local'
1628
process.env['PGUSER'] = 'bmc2'
1729
process.env['PGPORT'] = 7890
@@ -26,7 +38,13 @@ test('ConnectionParameters initialized from environment variables', function (t)
2638
assert.equal(subject.password, 'open', 'env password')
2739
})
2840

29-
test('ConnectionParameters initialized from mix', function (t) {
41+
suite.test('ConnectionParameters initialized from mix', function () {
42+
clearEnv()
43+
process.env['PGHOST'] = 'local'
44+
process.env['PGUSER'] = 'bmc2'
45+
process.env['PGPORT'] = 7890
46+
process.env['PGDATABASE'] = 'allyerbase'
47+
process.env['PGPASSWORD'] = 'open'
3048
delete process.env['PGPASSWORD']
3149
delete process.env['PGDATABASE']
3250
var subject = new ConnectionParameters({
@@ -40,12 +58,8 @@ test('ConnectionParameters initialized from mix', function (t) {
4058
assert.equal(subject.password, defaults.password, 'defaults password')
4159
})
4260

43-
// clear process.env
44-
for (var key in process.env) {
45-
delete process.env[key]
46-
}
47-
48-
test('connection string parsing', function (t) {
61+
suite.test('connection string parsing', function () {
62+
clearEnv()
4963
var string = 'postgres://brian:pw@boom:381/lala'
5064
var subject = new ConnectionParameters(string)
5165
assert.equal(subject.host, 'boom', 'string host')
@@ -55,7 +69,10 @@ test('connection string parsing', function (t) {
5569
assert.equal(subject.database, 'lala', 'string database')
5670
})
5771

58-
test('connection string parsing - ssl', function (t) {
72+
suite.test('connection string parsing - ssl', function () {
73+
// clear process.env
74+
clearEnv()
75+
5976
var string = 'postgres://brian:pw@boom:381/lala?ssl=true'
6077
var subject = new ConnectionParameters(string)
6178
assert.equal(subject.ssl, true, 'ssl')
@@ -75,27 +92,24 @@ test('connection string parsing - ssl', function (t) {
7592
string = 'postgres://brian:pw@boom:381/lala'
7693
subject = new ConnectionParameters(string)
7794
assert.equal(!!subject.ssl, false, 'ssl')
78-
})
7995

80-
// clear process.env
81-
for (var key in process.env) {
82-
delete process.env[key]
83-
}
96+
string = 'postgres://brian:pw@boom:381/lala?ssl=no-verify'
97+
subject = new ConnectionParameters(string)
98+
assert.deepStrictEqual(subject.ssl, { rejectUnauthorized: false }, 'ssl')
99+
})
84100

85-
test('ssl is false by default', function () {
101+
suite.test('ssl is false by default', function () {
102+
clearEnv()
86103
var subject = new ConnectionParameters()
87104
assert.equal(subject.ssl, false)
88105
})
89106

90107
var testVal = function (mode, expected) {
91-
// clear process.env
92-
for (var key in process.env) {
93-
delete process.env[key]
94-
}
95-
process.env.PGSSLMODE = mode
96-
test('ssl is ' + expected + ' when $PGSSLMODE=' + mode, function () {
108+
suite.test('ssl is ' + expected + ' when $PGSSLMODE=' + mode, function () {
109+
clearEnv()
110+
process.env.PGSSLMODE = mode
97111
var subject = new ConnectionParameters()
98-
assert.equal(subject.ssl, expected)
112+
assert.deepStrictEqual(subject.ssl, expected)
99113
})
100114
}
101115

@@ -106,6 +120,7 @@ testVal('prefer', true)
106120
testVal('require', true)
107121
testVal('verify-ca', true)
108122
testVal('verify-full', true)
123+
testVal('no-verify', { rejectUnauthorized: false })
109124

110125
// restore process.env
111126
for (var key in realEnv) {

0 commit comments

Comments
 (0)