Skip to content

Commit

Permalink
feat: https url support
Browse files Browse the repository at this point in the history
  • Loading branch information
Jan Krems committed Apr 18, 2016
1 parent 4ed4471 commit fda4930
Show file tree
Hide file tree
Showing 13 changed files with 278 additions and 21 deletions.
15 changes: 6 additions & 9 deletions lib/fetch.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,14 @@ function validateBody(body) {
return body;
}

function getAgent(options) {
function getAgent(options, urlObj) {
var agent;
var isHttps = urlObj.protocol === 'https:';
if (options.agent === false) {
if (options.protocol === 'https:') {
agent = new https.Agent();
} else {
agent = new http.Agent();
}
return isHttps ? new https.Agent() : new http.Agent();
}

if (options.protocol === 'https:') {
if (isHttps) {
agent = options.agent || options.httpsAgent || https.globalAgent;
} else {
agent = options.agent || options.httpAgent || http.globalAgent;
Expand Down Expand Up @@ -186,7 +183,7 @@ function _fetch(urlObj, options) {
throw new Error('Invalid URI ' + JSON.stringify(hostname));
}

var agent = getAgent(options);
var agent = getAgent(options, urlObj);
assign(agent.options, {
// http:
keepAlive: options.keepAlive,
Expand All @@ -208,7 +205,7 @@ function _fetch(urlObj, options) {
});

return request({
agent: getAgent(options),
agent: agent,
protocol: urlObj.protocol,
hostname: hostname,
port: urlObj.port,
Expand Down
22 changes: 22 additions & 0 deletions test/certs/ca/my-root-ca.crt.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIJAL83lAMyAi5sMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNV
BAYTAlVTMQ0wCwYDVQQIDARVdGFoMQ4wDAYDVQQHDAVQcm92bzEjMCEGA1UECgwa
QUNNRSBTaWduaW5nIEF1dGhvcml0eSBJbmMxFDASBgNVBAMMC2V4YW1wbGUuY29t
MB4XDTE2MDQxODIwMDU1N1oXDTE5MDIwNjIwMDU1N1owZzELMAkGA1UEBhMCVVMx
DTALBgNVBAgMBFV0YWgxDjAMBgNVBAcMBVByb3ZvMSMwIQYDVQQKDBpBQ01FIFNp
Z25pbmcgQXV0aG9yaXR5IEluYzEUMBIGA1UEAwwLZXhhbXBsZS5jb20wggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiMISu6F/nsIltkJOiBlSe+sdVLF2i
6yGC+z592gTkJdsrN5RrBHWuU6j5FQfQ2ZrcRQwr/lc2bo76so/pcZozvaQ5CfYM
RT8vv9xOV/K+TS1XMVQ57gF5fpDKvhEtvu9E29Q8eNFWcaIlnPsN76esLasUYM7Q
6vFjptTtQ1hKRhxPC3G36OdiM2uGnpRy5+n6X6nZD6S/gzY4DBO2YVlZG9fRb5XJ
w+HZc3mWACsM8rbalFCTBddXUWSK0Xr8yHz3ug9qhiCv41APve7ZtHUF4yPAMnnL
hEg+m+UQZHYx7B01JEDWhtTQ3dUo2DxWVZHUMlXDNuGejU0qtF2Au0p9AgMBAAGj
UDBOMB0GA1UdDgQWBBRQmRC2Pv5oOGdsGXyzPOKOFGcAnDAfBgNVHSMEGDAWgBRQ
mRC2Pv5oOGdsGXyzPOKOFGcAnDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
A4IBAQCRRhbdwHReQ9pcAE76ZDhWeGM47R4erP77gLS8PCtySOmMYtfP1gvHlHrQ
uv7PbEJtCtCN1v2Obh70K43LyMkzU4yfAArbJILMLGl+GzRX0Qq3S4JF7lx0OouO
NFjTCgA0RygLI83gszQiK5TPbq90flT/auv9QUJWkrFWmC4YIkI3Ghwi8n1RXHGl
/EMz6DDwtjQbY5/lRaOTs0NB5RePo5Dy34oqtCn+sufeqdDwAK8GJZBTmlpG8uc8
6//Pp6knJuzR2xWizjkjJM5VG4lv9UVU6jsdr4dnwfxCjX/dpEqTL9rR+OZM5r3T
xyof9OlZb0Dho7wxI0Hi4InzU9Jy
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions test/certs/ca/my-root-ca.key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAojCEruhf57CJbZCTogZUnvrHVSxdoushgvs+fdoE5CXbKzeU
awR1rlOo+RUH0Nma3EUMK/5XNm6O+rKP6XGaM72kOQn2DEU/L7/cTlfyvk0tVzFU
Oe4BeX6Qyr4RLb7vRNvUPHjRVnGiJZz7De+nrC2rFGDO0OrxY6bU7UNYSkYcTwtx
t+jnYjNrhp6Ucufp+l+p2Q+kv4M2OAwTtmFZWRvX0W+VycPh2XN5lgArDPK22pRQ
kwXXV1FkitF6/Mh897oPaoYgr+NQD73u2bR1BeMjwDJ5y4RIPpvlEGR2MewdNSRA
1obU0N3VKNg8VlWR1DJVwzbhno1NKrRdgLtKfQIDAQABAoIBADBw+VAcS3ixu3oj
8lQ0O9X35M1FoPnl7G5oh/OiyE80F0/DG+sSu+tDRXaPl3QDakNbxBTntDinsMCj
0GPS8FF/1KrMlNZ5YDPsw+oKTpAUEPS34QYkVgBpkula91qIaoJQfgVJuIxvCBTf
3AP/jj7YrP47I8o2Qb6Xt4Td1mLoL+0Uta/zXhpeKHjJF3wdY0Ef1hVnmZTo1k+k
NM0fIPVT/CBbyyQpEzmqeCCmXicJDDIUiA8g1qCDfJpUIBN3bMuBiSRWdFyDaX40
SpXEkxZn91Jn60kcfIgEJQk0Ivi9BMP0ilDeO/nYwrr27oHA9rLioRsdtFQTgor5
1IQcRAECgYEA1sEqDBdgItFF16JjuN4aASyrteaZm6vp3uOa1em2b7wcBpQapc0O
mJePVIwZJGhFTYEl2VDOVi9Ysa8zY+1NXr2wYcGuPgb5sdoln/exp2gEVZyJmphq
WMDgJrZwO9qDUODhG+x0LcEOA5BXeCUa2DThmMg7lF/OSAC9aOIpzoECgYEAwVbj
yxuxyBMb1rXv/hEXeLak7ERPmQM+y5eUuxnbuIKljmCea176S/fRce0SH1fqp8xA
etILERTL+0NmSqXQBVAcMGu4Jcrkx2K+uQBqosjb4RJ7/YCU7lwc0zu6KB/nbnA7
vPk8n680LRjVmdW9Fh2weTXnMbRZz2Djyfvptf0CgYAV4fz82mzrX1O0k1GCBu+z
au/cSzEf0ba1BZBDd9slK4/Xg8PrXSe9mMP8I4J0WUOmkCBhMoCz+4MYJ/gemJGn
s8CDVY8Btwg+fTIUSNMLcefvKVJENH+xp4WvrCtnje6PkTqe88sq1l8tMcoX7f/8
Q/cw8EZR6ilE4P5r74+/AQKBgQCK5s4JYgA76d6aR2QAeG8QfsfGJt245Kf8xQ5J
za4ZxWMEA05NfZL9eTG0U8otUpB3tTquArGIuBRElIutHatx5bga4YkPPdFXng3A
BBiYkw3Fie4ilnppNSxQZhy8Lw+qPF/uyHFRmCI4NBthxjlu5i2fJ6bOAvBzGP0O
ZDnoUQKBgBYzoOwTDpjwx9etTGeNfa3ImZDliEEvkawdZgCsgzufgwbz9T+rxr9n
+YZUcKjZlFOoGMg8dWcqiRZqUesraH9toNDryRV8eBJVgmoH5+PS5Or8uwsi1iqP
nPyOk5wqClT0roZoNHWOhTqL5t2Eu1aUmhTXEI0iBiBm80TlUeYD
-----END RSA PRIVATE KEY-----
1 change: 1 addition & 0 deletions test/certs/ca/my-root-ca.srl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
E2F57A08825F5D53
22 changes: 22 additions & 0 deletions test/certs/client/my-root-ca.crt.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIJAL83lAMyAi5sMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNV
BAYTAlVTMQ0wCwYDVQQIDARVdGFoMQ4wDAYDVQQHDAVQcm92bzEjMCEGA1UECgwa
QUNNRSBTaWduaW5nIEF1dGhvcml0eSBJbmMxFDASBgNVBAMMC2V4YW1wbGUuY29t
MB4XDTE2MDQxODIwMDU1N1oXDTE5MDIwNjIwMDU1N1owZzELMAkGA1UEBhMCVVMx
DTALBgNVBAgMBFV0YWgxDjAMBgNVBAcMBVByb3ZvMSMwIQYDVQQKDBpBQ01FIFNp
Z25pbmcgQXV0aG9yaXR5IEluYzEUMBIGA1UEAwwLZXhhbXBsZS5jb20wggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiMISu6F/nsIltkJOiBlSe+sdVLF2i
6yGC+z592gTkJdsrN5RrBHWuU6j5FQfQ2ZrcRQwr/lc2bo76so/pcZozvaQ5CfYM
RT8vv9xOV/K+TS1XMVQ57gF5fpDKvhEtvu9E29Q8eNFWcaIlnPsN76esLasUYM7Q
6vFjptTtQ1hKRhxPC3G36OdiM2uGnpRy5+n6X6nZD6S/gzY4DBO2YVlZG9fRb5XJ
w+HZc3mWACsM8rbalFCTBddXUWSK0Xr8yHz3ug9qhiCv41APve7ZtHUF4yPAMnnL
hEg+m+UQZHYx7B01JEDWhtTQ3dUo2DxWVZHUMlXDNuGejU0qtF2Au0p9AgMBAAGj
UDBOMB0GA1UdDgQWBBRQmRC2Pv5oOGdsGXyzPOKOFGcAnDAfBgNVHSMEGDAWgBRQ
mRC2Pv5oOGdsGXyzPOKOFGcAnDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
A4IBAQCRRhbdwHReQ9pcAE76ZDhWeGM47R4erP77gLS8PCtySOmMYtfP1gvHlHrQ
uv7PbEJtCtCN1v2Obh70K43LyMkzU4yfAArbJILMLGl+GzRX0Qq3S4JF7lx0OouO
NFjTCgA0RygLI83gszQiK5TPbq90flT/auv9QUJWkrFWmC4YIkI3Ghwi8n1RXHGl
/EMz6DDwtjQbY5/lRaOTs0NB5RePo5Dy34oqtCn+sufeqdDwAK8GJZBTmlpG8uc8
6//Pp6knJuzR2xWizjkjJM5VG4lv9UVU6jsdr4dnwfxCjX/dpEqTL9rR+OZM5r3T
xyof9OlZb0Dho7wxI0Hi4InzU9Jy
-----END CERTIFICATE-----
9 changes: 9 additions & 0 deletions test/certs/client/my-server.pub
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2F5MV1j7lMAc1oKKqFJ7
+1tzXbI6bPZKahIEcmTFFwvMUekjKSOtbtsMaevGXJxQReZkZTsGOeSrHba6RCc0
C0V7JHLNiFTuIECkKlesH9rSRT6b8sxQkSsZugL6f0ypyc5H4buz5wN5FLN/PEqu
txNxU/kC5XAkdFpjLAUNCGa13/F4w66wTPBpWcqWbYJ1RmjnP7+lFRWuU1VoBi23
lDZv8frfrNzRdDAB7XUNL7O9Zfx3mgC2jQ0P2NP27gYh+a3vJHWX9PcGWJ2RWG5P
H9Gln+vm9lRaLJOOvijm/q447NA9luiEy2w2JfsFFiN+VVGH5Moq5XGuf68qbIrL
1wIDAQAB
-----END PUBLIC KEY-----
22 changes: 22 additions & 0 deletions test/certs/server/my-root-ca.crt.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIJAL83lAMyAi5sMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNV
BAYTAlVTMQ0wCwYDVQQIDARVdGFoMQ4wDAYDVQQHDAVQcm92bzEjMCEGA1UECgwa
QUNNRSBTaWduaW5nIEF1dGhvcml0eSBJbmMxFDASBgNVBAMMC2V4YW1wbGUuY29t
MB4XDTE2MDQxODIwMDU1N1oXDTE5MDIwNjIwMDU1N1owZzELMAkGA1UEBhMCVVMx
DTALBgNVBAgMBFV0YWgxDjAMBgNVBAcMBVByb3ZvMSMwIQYDVQQKDBpBQ01FIFNp
Z25pbmcgQXV0aG9yaXR5IEluYzEUMBIGA1UEAwwLZXhhbXBsZS5jb20wggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiMISu6F/nsIltkJOiBlSe+sdVLF2i
6yGC+z592gTkJdsrN5RrBHWuU6j5FQfQ2ZrcRQwr/lc2bo76so/pcZozvaQ5CfYM
RT8vv9xOV/K+TS1XMVQ57gF5fpDKvhEtvu9E29Q8eNFWcaIlnPsN76esLasUYM7Q
6vFjptTtQ1hKRhxPC3G36OdiM2uGnpRy5+n6X6nZD6S/gzY4DBO2YVlZG9fRb5XJ
w+HZc3mWACsM8rbalFCTBddXUWSK0Xr8yHz3ug9qhiCv41APve7ZtHUF4yPAMnnL
hEg+m+UQZHYx7B01JEDWhtTQ3dUo2DxWVZHUMlXDNuGejU0qtF2Au0p9AgMBAAGj
UDBOMB0GA1UdDgQWBBRQmRC2Pv5oOGdsGXyzPOKOFGcAnDAfBgNVHSMEGDAWgBRQ
mRC2Pv5oOGdsGXyzPOKOFGcAnDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
A4IBAQCRRhbdwHReQ9pcAE76ZDhWeGM47R4erP77gLS8PCtySOmMYtfP1gvHlHrQ
uv7PbEJtCtCN1v2Obh70K43LyMkzU4yfAArbJILMLGl+GzRX0Qq3S4JF7lx0OouO
NFjTCgA0RygLI83gszQiK5TPbq90flT/auv9QUJWkrFWmC4YIkI3Ghwi8n1RXHGl
/EMz6DDwtjQbY5/lRaOTs0NB5RePo5Dy34oqtCn+sufeqdDwAK8GJZBTmlpG8uc8
6//Pp6knJuzR2xWizjkjJM5VG4lv9UVU6jsdr4dnwfxCjX/dpEqTL9rR+OZM5r3T
xyof9OlZb0Dho7wxI0Hi4InzU9Jy
-----END CERTIFICATE-----
20 changes: 20 additions & 0 deletions test/certs/server/my-server.crt.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDOzCCAiMCCQDi9XoIgl9dUzANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJV
UzENMAsGA1UECAwEVXRhaDEOMAwGA1UEBwwFUHJvdm8xIzAhBgNVBAoMGkFDTUUg
U2lnbmluZyBBdXRob3JpdHkgSW5jMRQwEgYDVQQDDAtleGFtcGxlLmNvbTAeFw0x
NjA0MTgyMDA1NTdaFw0xNzA4MzEyMDA1NTdaMFgxCzAJBgNVBAYTAlVTMQ0wCwYD
VQQIDARVdGFoMQ4wDAYDVQQHDAVQcm92bzEWMBQGA1UECgwNQUNNRSBUZWNoIElu
YzESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEA2F5MV1j7lMAc1oKKqFJ7+1tzXbI6bPZKahIEcmTFFwvMUekjKSOtbtsM
aevGXJxQReZkZTsGOeSrHba6RCc0C0V7JHLNiFTuIECkKlesH9rSRT6b8sxQkSsZ
ugL6f0ypyc5H4buz5wN5FLN/PEqutxNxU/kC5XAkdFpjLAUNCGa13/F4w66wTPBp
WcqWbYJ1RmjnP7+lFRWuU1VoBi23lDZv8frfrNzRdDAB7XUNL7O9Zfx3mgC2jQ0P
2NP27gYh+a3vJHWX9PcGWJ2RWG5PH9Gln+vm9lRaLJOOvijm/q447NA9luiEy2w2
JfsFFiN+VVGH5Moq5XGuf68qbIrL1wIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBn
ISho93Z3IXLDB+wTZXd4dco1zfTRXzpM999SA8pVPRPytPOSYhg1435qmJsqrNZb
m3I+Fh+uZofYXkAynuhtyJMH31DYJ3QdmpozG3yK26PTCONVVG6i4iGKp7HptRb2
X6fSRv8HDx2JMAljxv6wWqMA4dCoEXXhtPum98QDNjqcLO/hOeVkUTaP/ACreZAz
N9IlOZJ02gHzLD2H2HYbcBnzwiIwaLoizgWUmPbGKaj2MoOte4xXej+6kNxPwhtF
f+nQmCkikLctuLI+iAybkILeUqPqCMjkC9yE6pLMhOaK/bheso/+jcvatef0bW3H
C3ASAvrWoBZiir66U/Ht
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions test/certs/server/my-server.key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2F5MV1j7lMAc1oKKqFJ7+1tzXbI6bPZKahIEcmTFFwvMUekj
KSOtbtsMaevGXJxQReZkZTsGOeSrHba6RCc0C0V7JHLNiFTuIECkKlesH9rSRT6b
8sxQkSsZugL6f0ypyc5H4buz5wN5FLN/PEqutxNxU/kC5XAkdFpjLAUNCGa13/F4
w66wTPBpWcqWbYJ1RmjnP7+lFRWuU1VoBi23lDZv8frfrNzRdDAB7XUNL7O9Zfx3
mgC2jQ0P2NP27gYh+a3vJHWX9PcGWJ2RWG5PH9Gln+vm9lRaLJOOvijm/q447NA9
luiEy2w2JfsFFiN+VVGH5Moq5XGuf68qbIrL1wIDAQABAoIBAB9VkLK5pT2GkOaT
4ya7Q09EkDGKhSGQjXhNAa3bYBuVTtKx87CahRxfxq10QrbYwFtPIUzzvlQWBJ35
/4GtN8FGH65InfFXc2DiW6PyLHA0jW0Pwx/nbOeJGWGx2rsizBf4srpDJ6uV+iwA
TrXZjvHec/QYRM4bbnwXNvOCC8Aic5tyoCNWZm0TYkC9XGsUNgTIenqXx6fSHSzo
/w4aHFZg8yS0BObi6q+LKZKjtP+IVuu0GpWoHORiZDshaHKiNXBwP0BFf5KdXFCR
H+b0L7Z2IW0ze6gjs+eniFZR+lnOEDj+o56mhuU7aIoxHVwIKiSCwfFfg8FwubOM
hOeKrMkCgYEA67+MqHKVD+S4ddF0RUaFF4Ee8/8C1CVr1IyCZCkGmiyE8WbmCNeI
8Dt09XYAzLcaVmYKKYe+2JliBCnGisS2qJ15fwvThhJqLQZQ3H6B+GeFUKH2iMuV
1DgneRMe2K1HJ6mb+NMxPj3rQ3jaXWxGKnwI+e+cph4CemHqDJjrkpMCgYEA6vSO
eJoTBkxHnRuljyaz+GgVgf3dXaNBYnmKzzyvuIpDzu6Ugz8snmWy2IWpSlYzG9oh
OuZoUMoDqX0AG/hBhu/j2eWiURs/wx/t6TQeRk2LJ6snbvRNnQixrM0mynyn78K1
erPaFTnMbKGzSrX8/TGKoD3pU+DbXHXbi7Zy2C0CgYBp2NIdm3yj6yyK8aUDqZr+
J6IvKRMrDzYv83pj4Cuvs0dpX6ru018PhZKI1xea0qdHnX74kJM2iv+AIQWcrp/Y
awPu7+9j5ga3+nr51O8kCc7Imj+nwciexSur59LUtFAbVcLK4H/ek0x7OdrJUWDb
mF8rYNLznsu8CRRd3Zb/cwKBgD4Gg5n46q7N8lXaV5F74SThrVPcxdSTZY5ukaN1
3Nm1voLhXtlrEwdZx6X7Wx6htOpUYlNfQgiZ2++hbSb1Ga9aoucCBSCuNd34DuFy
fc+HZwX42/chjV+4TNdWbTglQlw8JZaX5imWUY4X/fHqKzhYHMWCspcPFDnLb0Lp
zlWdAoGBAMvcRpwAf0SEnDK6smEsfwzTjp8JuIktT284S7/Hpzpq2pNLjQ93GLuy
ol37VfPQW735ITQ1NP5IbBrabZBxB0pZWS/e4YqGr82j3O8NAapYvRaNIotQAGmi
zj+jDATp3x30cYQOMpcUr/tvW4V6ECzsA/oQQ9YlqIssnaaaJi/M
-----END RSA PRIVATE KEY-----
17 changes: 17 additions & 0 deletions test/certs/tmp/my-server.csr.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICnTCCAYUCAQAwWDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBFV0YWgxDjAMBgNV
BAcMBVByb3ZvMRYwFAYDVQQKDA1BQ01FIFRlY2ggSW5jMRIwEAYDVQQDDAlsb2Nh
bGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYXkxXWPuUwBzW
goqoUnv7W3Ndsjps9kpqEgRyZMUXC8xR6SMpI61u2wxp68ZcnFBF5mRlOwY55Ksd
trpEJzQLRXskcs2IVO4gQKQqV6wf2tJFPpvyzFCRKxm6Avp/TKnJzkfhu7PnA3kU
s388Sq63E3FT+QLlcCR0WmMsBQ0IZrXf8XjDrrBM8GlZypZtgnVGaOc/v6UVFa5T
VWgGLbeUNm/x+t+s3NF0MAHtdQ0vs71l/HeaALaNDQ/Y0/buBiH5re8kdZf09wZY
nZFYbk8f0aWf6+b2VFosk46+KOb+rjjs0D2W6ITLbDYl+wUWI35VUYfkyirlca5/
rypsisvXAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEArvKtcUOfm6cMTDIZhmqC
5N86Jaz7OkedDEmhZf6JTbhZx7n4P/13IlWDICyOIZLVw6oW/CJ8cVsw+K5J2BtK
D0cs0caiCeki01ML3i9EeunVlNKvPIJ9mOla0YIV1gH3vylldGwMlpa3ZsBR8Si2
shbJ4r6D6dosY9pKhQ4Ifd1krIKVQLWhWuCpyP+LfTmlsZRbzx+HiE85MmwjqbHt
YgYrMB+DVVQEjkRXjDGoAUNIE/hoN2BZGD3C50JBOl+5mNTSLHA2BJm6503AgUE6
ZprMfEjgpHCrJpZBfqoy2GK6PwykbG8XemqLID9IzGJ3nrHGpt4QmdrakxWoSfEI
AA==
-----END CERTIFICATE REQUEST-----
66 changes: 66 additions & 0 deletions test/fetch-https.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
'use strict';
var assert = require('assertive');
var Bluebird = require('bluebird');

// This is important because PhantomJS has a non-writeable
// error.stack property and the resulting warnings make the tests fail...
Bluebird.config({ warnings: false });

var fetch = require('../').fetch;

var options = require('./mock-service');

describe('fetch: https', function () {
it('can load from valid https remote', function () {
// This is a remote call which isn't great but it means we get a valid
// https certificate without having to pull any tricks.
this.timeout(2000);
return fetch('https://api.reddit.com/r/javascript/about.json')
.then(function (res) {
assert.equal(200, res.statusCode);
});
});

it('fails with self-signed https', function () {
return assert.rejects(fetch(options.baseUrlTls))
.then(function (error) {
// In browsers we don't get any nice, reliable errors (yet?)
if (typeof document === 'undefined') {
if (error.code) {
// more recent node versions (e.g. 4+)
assert.equal('SELF_SIGNED_CERT_IN_CHAIN', error.code);
} else {
// old node versions (e.g. 0.10)
assert.equal('SELF_SIGNED_CERT_IN_CHAIN', error.message);
}
}
});
});

it('supports rejectUnauthorized=false', function () {
if (typeof document !== 'undefined') {
// Browsers don't allow to side-step https
return this.skip();
}
return fetch(options.baseUrlTls, {
rejectUnauthorized: false,
})
.then(function (res) {
assert.equal(200, res.statusCode);
});
});

it('can load from self-signed https remote', function () {
if (typeof document !== 'undefined') {
// Browsers don't allow to side-step https
return this.skip();
}
var fs = require('fs');
return fetch(options.baseUrlTls, {
ca: fs.readFileSync('test/certs/client/my-root-ca.crt.pem'),
})
.then(function (res) {
assert.equal(200, res.statusCode);
});
});
});
4 changes: 3 additions & 1 deletion test/mock-service.browser.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
'use strict';
var MOCK_SERVICE_PORT = 3066;
var MOCK_SERVICE_PORT_TLS = 3067;

var options = {
baseUrl: 'http://127.0.0.1:' + MOCK_SERVICE_PORT,
baseUrl: 'http://localhost:' + MOCK_SERVICE_PORT,
baseUrlTls: 'https://localhost:' + MOCK_SERVICE_PORT_TLS,
};
module.exports = options;
47 changes: 36 additions & 11 deletions test/mock-service.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
'use strict';
var fs = require('fs');
var http = require('http');
var https = require('https');
var parseUrl = require('url').parse;

var options = require('./mock-service.browser');

var MOCK_SERVICE_PORT = +(options.baseUrl.match(/:(\d+)/)[1]);
var MOCK_SERVICE_PORT_TLS = +(options.baseUrlTls.match(/:(\d+)/)[1]);

var server;
var serverTls;

function sendEcho(req, res) {
var chunks = [];
Expand Down Expand Up @@ -80,14 +84,27 @@ function handleRequest(req, res) {
}
}

function bootupServers(done) {
var serversListening = 0;
function onListen() {
++serversListening;
if (serversListening === 2) done();
}
server = http.createServer(handleRequest);
server.on('error', done);
server.listen(MOCK_SERVICE_PORT, onListen);
var certOptions = {
key: fs.readFileSync('test/certs/server/my-server.key.pem'),
ca: [fs.readFileSync('test/certs/server/my-root-ca.crt.pem')],
cert: fs.readFileSync('test/certs/server/my-server.crt.pem'),
};
serverTls = https.createServer(certOptions, handleRequest);
serverTls.on('error', done);
serverTls.listen(MOCK_SERVICE_PORT_TLS, onListen);
}

if (typeof before === 'function') {
before(function (done) {
server = http.createServer(handleRequest);
server.on('error', done);
server.listen(MOCK_SERVICE_PORT, function () {
done();
});
});
before(bootupServers);

after(function () {
if (server) {
Expand All @@ -97,13 +114,21 @@ if (typeof before === 'function') {
// Ignore cleanup error
}
}
if (serverTls) {
try {
serverTls.close();
} catch (e) {
// Ignore cleanup error
}
}
});
}
if (process.mainModule === module) {
server = http.createServer(handleRequest);
server.listen(MOCK_SERVICE_PORT, function () {
/* eslint no-console: 0 */
console.log('Listening on %s\n', options.baseUrl);
bootupServers(function (error) {
if (error) throw error;
/* eslint no-console:0 */
console.log('Listening on %s', options.baseUrl);
console.log('HTTPS on %s', options.baseUrlTls);
});
}

Expand Down

0 comments on commit fda4930

Please sign in to comment.