mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
Merge pull request #386 from brianc/js-ssl
Fix long-standing hanging SSL connection but with JavaScript
This commit is contained in:
commit
58b4f266ea
@ -53,41 +53,30 @@ Connection.prototype.connect = function(port, host) {
|
||||
self.emit('end');
|
||||
});
|
||||
|
||||
if(this.ssl) {
|
||||
this.stream.once('data', function(buffer) {
|
||||
self.setBuffer(buffer);
|
||||
var msg = self.readSslResponse();
|
||||
self.emit('message', msg);
|
||||
self.emit(msg.name, msg);
|
||||
});
|
||||
this.once('sslresponse', function(msg) {
|
||||
if(msg.text == 0x53) {
|
||||
var tls = require('tls');
|
||||
self.stream.removeAllListeners();
|
||||
self.stream = tls.connect({
|
||||
socket: self.stream,
|
||||
servername: host,
|
||||
rejectUnauthorized: self.ssl.rejectUnauthorized,
|
||||
ca: self.ssl.ca,
|
||||
pfx: self.ssl.pfx,
|
||||
key: self.ssl.key,
|
||||
passphrase: self.ssl.passphrase,
|
||||
cert: self.ssl.cert,
|
||||
NPNProtocols: self.ssl.NPNProtocols
|
||||
});
|
||||
self.attachListeners(self.stream);
|
||||
self.emit('sslconnect');
|
||||
} else {
|
||||
self.emit(
|
||||
'error',
|
||||
new Error("The server doesn't support SSL/TLS connections.")
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
this.attachListeners(this.stream);
|
||||
if(!this.ssl) {
|
||||
return this.attachListeners(this.stream);
|
||||
}
|
||||
|
||||
this.stream.once('data', function(buffer) {
|
||||
var responseCode = buffer.toString('utf8');
|
||||
if(responseCode != 'S') {
|
||||
return self.emit('error', new Error('The server does not support SSL connections'));
|
||||
}
|
||||
var tls = require('tls');
|
||||
self.stream = tls.connect({
|
||||
socket: self.stream,
|
||||
servername: host,
|
||||
rejectUnauthorized: self.ssl.rejectUnauthorized,
|
||||
ca: self.ssl.ca,
|
||||
pfx: self.ssl.pfx,
|
||||
key: self.ssl.key,
|
||||
passphrase: self.ssl.passphrase,
|
||||
cert: self.ssl.cert,
|
||||
NPNProtocols: self.ssl.NPNProtocols
|
||||
});
|
||||
self.attachListeners(self.stream);
|
||||
self.emit('sslconnect');
|
||||
});
|
||||
};
|
||||
|
||||
Connection.prototype.attachListeners = function(stream) {
|
||||
|
||||
25
test/integration/client/heroku-ssl-tests.js
Normal file
25
test/integration/client/heroku-ssl-tests.js
Normal file
@ -0,0 +1,25 @@
|
||||
var helper = require(__dirname + '/../test-helper');
|
||||
var pg = helper.pg;
|
||||
|
||||
var host = 'ec2-107-20-224-218.compute-1.amazonaws.com';
|
||||
var database = 'db6kfntl5qhp2';
|
||||
var user = 'kwdzdnqpdiilfs';
|
||||
var port = 5432;
|
||||
|
||||
var config = {
|
||||
host: host,
|
||||
port: port,
|
||||
database: database,
|
||||
user: user,
|
||||
password: 'uaZoSSHgi7mVM7kYaROtusClKu',
|
||||
ssl: true
|
||||
};
|
||||
|
||||
//connect & disconnect from heroku
|
||||
pg.connect(config, assert.success(function(client, done) {
|
||||
client.query('SELECT NOW() as time', assert.success(function(res) {
|
||||
assert(res.rows[0].time.getTime());
|
||||
done();
|
||||
pg.end();
|
||||
}))
|
||||
}));
|
||||
Loading…
x
Reference in New Issue
Block a user