diff --git a/lib/connection.js b/lib/connection.js index 2bdd07fa..f6048572 100644 --- a/lib/connection.js +++ b/lib/connection.js @@ -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) { diff --git a/test/integration/client/heroku-ssl-tests.js b/test/integration/client/heroku-ssl-tests.js new file mode 100644 index 00000000..5b6b87da --- /dev/null +++ b/test/integration/client/heroku-ssl-tests.js @@ -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(); + })) +}));