Skip to content

Commit

Permalink
Merge pull request #304 from martynsmith/apeiron/fix-secure-connections
Browse files Browse the repository at this point in the history
Fix TLS connections.
  • Loading branch information
jirwin committed Jan 13, 2015
2 parents 71e09d3 + 5727077 commit 4d22148
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 17 deletions.
5 changes: 2 additions & 3 deletions lib/irc.js
Original file line number Diff line number Diff line change
Expand Up @@ -657,14 +657,13 @@ Client.prototype.connect = function(retryCount, callback) {

// try to connect to the server
if (self.opt.secure) {
var creds = self.opt.secure;
creds.rejectUnauthorized = !self.opt.selfSigned;
connectionOpts.rejectUnauthorized = !self.opt.selfSigned;

if (typeof self.opt.secure == 'object') {
// copy "secure" opts to options passed to connect()
for (var f in self.opt.secure) {
if (creds.hasOwnProperty(f))
connectionOpts[f] = creds[f];
connectionOpts[f] = self.opt.secure[f];
}
}

Expand Down
15 changes: 15 additions & 0 deletions test/data/ircd.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDH5pYbcECKUrbRbUXKUu7lMCgb9UkPi4+Ur9f0LYdspHZJlv0S
yBn4RpJOl8EsMhWI+houY3mBlcCL/DwiGfMDk5TSomyrI6eONFworokTJpG2h0f0
cWnGdDW1zu8Z1odo047NWzwwv2mU03fkZmzfCclAzjKkDMMqP34mPl5TnwIDAQAB
AoGAJslK3tAM9cnOxxvYqsUkrTuGzMXvAyElHshvsmUTHbVbbjPprrc8sruer7kq
NhURsJ42bkHG1ankzkSGtmcqi3LdBBhVLm5gyog2JxQlTxvUVOPvyrOsQkl3uDwL
aZqGTESHlLx7jhOKgiImqo0uGxNy46tzsHbpFGAeqTYcYKECQQD6faxqytMpMc/h
zcrWsRhe7Omj5D6VdrbkGkM8razn4Oyr42p8Xylcde2MlnTiTAL5ElxlLd4PYsLD
hKme/M5tAkEAzEwT1GU7CYjPdHHfsHUbDIHBh0BOJje2TXhDOa5tiZbOZevIk6TZ
V6p/9zjLe5RAc/dpzHv1C+vQOkhgvoNyuwJARwjGkU5NTXxTwGwUnoeAKsMyioia
etY8jTkpYha6VtOBKkmGlBiEaTUEFX9BTD9UBIABdavpMiHGq51+YJi+jQJAGYic
pdwtH8jwnM4qtgQ86DhDduMLoW0vJMmWJVxuplap30Uz4XgmDfXqXnzDueNSluvi
VkNb4iyL7uzi4ozNRwJALT0vP65RQ2d7OUEwB4XZFExKYzHADiFtw0NZtcWRW6y3
rN0uXMxEZ6vRQurVjO9GhB76fAo/UooX0MVF0ShFNQ==
-----END RSA PRIVATE KEY-----
17 changes: 17 additions & 0 deletions test/data/ircd.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICojCCAgugAwIBAgIJAMid3M25tUeUMA0GCSqGSIb3DQEBBQUAMGoxCzAJBgNV
BAYTAlpaMREwDwYDVQQIDAhJbnRlcm5ldDEPMA0GA1UEBwwGZ2l0aHViMREwDwYD
VQQKDAhub2RlLWlyYzEQMA4GA1UECwwHdGVzdGluZzESMBAGA1UEAwwJbG9jYWxo
b3N0MB4XDTE1MDExMjIzNDg0MloXDTI1MDEwOTIzNDg0MlowajELMAkGA1UEBhMC
WloxETAPBgNVBAgMCEludGVybmV0MQ8wDQYDVQQHDAZnaXRodWIxETAPBgNVBAoM
CG5vZGUtaXJjMRAwDgYDVQQLDAd0ZXN0aW5nMRIwEAYDVQQDDAlsb2NhbGhvc3Qw
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMfmlhtwQIpSttFtRcpS7uUwKBv1
SQ+Lj5Sv1/Qth2ykdkmW/RLIGfhGkk6XwSwyFYj6Gi5jeYGVwIv8PCIZ8wOTlNKi
bKsjp440XCiuiRMmkbaHR/RxacZ0NbXO7xnWh2jTjs1bPDC/aZTTd+RmbN8JyUDO
MqQMwyo/fiY+XlOfAgMBAAGjUDBOMB0GA1UdDgQWBBTUaumzrTJrl1goRRzOGgEO
VNKFmjAfBgNVHSMEGDAWgBTUaumzrTJrl1goRRzOGgEOVNKFmjAMBgNVHRMEBTAD
AQH/MA0GCSqGSIb3DQEBBQUAA4GBAGKppBE9mjk2zJPSxPcHl3RSpnPs5ZkuBLnK
rxZ2bR9VJhoQEwtiZRxkSXSdooj3eJgzMobYMEhSvFibUeBuIppB7oacys2Bd+O1
xzILcbgEPqsk5JFbYT9KD8r+sZy5Wa1A39eNkmdD/oWt9Mb1PLrDfM/melvZ9/vW
oMSmMipK
-----END CERTIFICATE-----
25 changes: 19 additions & 6 deletions test/helpers.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,34 @@
/* Mock irc server */

var fs = require('fs');
var net = require('net');
var tls = require('tls');
var util = require('util');
var EventEmitter = require('events').EventEmitter;

var MockIrcd = function(port, encoding) {
var MockIrcd = function(port, encoding, isSecure) {
var self = this;
var connectionClass;
var options = {};

this.port = port || 6667;
if (isSecure) {
connectionClass = tls;
options = {
key: fs.readFileSync('test/data/ircd.key'),
cert: fs.readFileSync('test/data/ircd.pem')
};
} else {
connectionClass = net;
}

this.port = port || (isSecure ? 6697 : 6667);
this.encoding = encoding || 'utf-8';
this.incoming = [];
this.outgoing = [];

this.server = net.createServer(function(c) {
this.server = connectionClass.createServer(options, function(c) {
c.on('data', function(data) {
var msg = data.toString(self.encoding);
self.emit('message', msg);
self.incoming = self.incoming.concat(msg.split('\r\n'));
});

Expand Down Expand Up @@ -50,6 +63,6 @@ module.exports.getFixtures = function(testSuite) {
return fixtures[testSuite];
}

module.exports.MockIrcd = function(port, encoding) {
return new MockIrcd(port, encoding);
module.exports.MockIrcd = function(port, encoding, isSecure) {
return new MockIrcd(port, encoding, isSecure);
};
29 changes: 21 additions & 8 deletions test/test-irc.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,32 @@ var test = require('tape');

var testHelpers = require('./helpers');

var expected = testHelpers.getFixtures('basic');
var greeting = ':localhost 001 testbot :Welcome to the Internet Relay Chat Network testbot\r\n';

test('connect, register and quit', function(t) {
var client, mock, expected;
runTests(t, false);
});

t.plan(3);
test('connect, register and quit, securely', function(t) {
runTests(t, true);
});

mock = testHelpers.MockIrcd();
expected = testHelpers.getFixtures('basic');
client = new irc.Client('localhost', 'testbot', {});
function runTests(t, isSecure) {
var port = isSecure ? 6697 : 6667;
var mock = testHelpers.MockIrcd(port, 'utf-8', isSecure);
var client = new irc.Client('localhost', 'testbot', {
secure: isSecure,
selfSigned: true,
port: port,
retryCount: 0,
debug: true
});

t.plan(expected.sent.length + expected.received.length);

mock.server.on('connection', function() {
mock.send(':localhost 001 testbot :Welcome to the Internet Relay Chat Network testbot\r\n');
mock.server.on(isSecure ? 'secureConnection' : 'connection', function() {
mock.send(greeting);
});

client.on('registered', function() {
Expand All @@ -33,4 +46,4 @@ test('connect, register and quit', function(t) {
}
mock.close();
});
});
}

0 comments on commit 4d22148

Please sign in to comment.