passport-tequila
Advanced tools
Comparing version 0.1.9 to 0.1.10
@@ -0,0 +0,0 @@ /** |
@@ -0,0 +0,0 @@ /** |
@@ -0,0 +0,0 @@ /** |
{ | ||
"name": "passport-tequila", | ||
"version": "0.1.9", | ||
"version": "0.1.10", | ||
"private": false, | ||
@@ -22,5 +22,9 @@ "scripts": { | ||
"express-session": "^1.11.3", | ||
"fqdn": "0.0.3", | ||
"ip": "^1.1.3", | ||
"method-override": "^2.3.5", | ||
"mocha": "^2.4.5", | ||
"morgan": "^1.6.1", | ||
"pem": "^1.8.3", | ||
"q": "^1.4.1", | ||
"underscore": "^1.8.3" | ||
@@ -41,2 +45,3 @@ }, | ||
}, | ||
"license": "MIT", | ||
"licenses": [ | ||
@@ -43,0 +48,0 @@ { |
@@ -0,0 +0,0 @@ # Passport-Tequila |
@@ -18,3 +18,8 @@ 'use strict'; | ||
request = weakRequire("request"), | ||
Protocol = require("../lib/passport-tequila/protocol"); | ||
os = require("os"), | ||
Protocol = require("../lib/passport-tequila/protocol"), | ||
pem = weakRequire("pem"), | ||
ip = weakRequire("ip"), | ||
fs = require("fs"), | ||
EventEmitter = require("events").EventEmitter; | ||
@@ -54,3 +59,3 @@ var txt2dictBodyParser = function () { | ||
var self = this; | ||
var server = HTTPSServer(self.app); | ||
var server = new HTTPSServer(self.app); | ||
server.listen(self.port || 0, function(error) { | ||
@@ -67,3 +72,3 @@ if (error) { | ||
function respondWithDict(res, dict) { | ||
res.set("Content-Type", "text/plain; charset=UTF-8\n").send(new Buffer( | ||
res.set("Content-Type", "text/plain; charset=UTF-8").send(new Buffer( | ||
Protocol.dict2txt(dict))); | ||
@@ -86,3 +91,3 @@ } | ||
tequila_port: this.port, | ||
agent: new https.Agent({ca: fakeCert}) | ||
agent: new https.Agent({ca: fakeCACert}) | ||
} | ||
@@ -164,56 +169,95 @@ }; | ||
// | ||
// openssl req -x509 -nodes -days 3650 -newkey rsa:1024 \ | ||
// -keyout /dev/stdout -batch -subj "/O=test/CN=localhost" | ||
// openssl req -x509 -nodes -days 10000 -newkey rsa:2048 \ | ||
// -keyout /dev/stdout -batch \ | ||
// -subj "/O=passport-tequila/CN=passport-tequila test CA" | ||
// | ||
var fakeCert = exports.certificate = | ||
"-----BEGIN CERTIFICATE-----\n" + | ||
"MIICFDCCAX2gAwIBAgIJAPk4T3QL6eNUMA0GCSqGSIb3DQEBCwUAMCMxDTALBgNV\n" + | ||
"BAoMBHRlc3QxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xNjAyMTUxNTMyNThaFw0y\n" + | ||
"NjAyMTIxNTMyNThaMCMxDTALBgNVBAoMBHRlc3QxEjAQBgNVBAMMCWxvY2FsaG9z\n" + | ||
"dDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtiDnFgt2H+larAOAwQ8drzyc\n" + | ||
"mAtbsHkyhEXE28anaZeyACb1MDxpzh4cG+Hy0yggiekORFPmjGsY3weGVTnANJK6\n" + | ||
"6FhqrQjrejl1oh0milv550tV+pFyyQ2a8gagbF3efKU1YixBA9nqyWA9uWHj2nLL\n" + | ||
"nfd9aKPS7iOqedQZ6UECAwEAAaNQME4wHQYDVR0OBBYEFGdKsgCwRxFBYl068ADv\n" + | ||
"UMYPCVsLMB8GA1UdIwQYMBaAFGdKsgCwRxFBYl068ADvUMYPCVsLMAwGA1UdEwQF\n" + | ||
"MAMBAf8wDQYJKoZIhvcNAQELBQADgYEAD4ExR63rqegQQ8tWoBjP2ytk+pU9Zfwr\n" + | ||
"QpyxGctrbjH8UmU0F9grTpXpmk8lEirb60pvzCyCy9fvjqYjaw72PgKnD/QvG8Xo\n" + | ||
"7GJPF2N1gVfSnlGvFTq6QyPXq8fM6kZkCfFj2FbSTDtfzauWCZdGzi84JRB3Oxs7\n" + | ||
"KQiZrnTMFcg=\n" + | ||
"-----END CERTIFICATE-----\n"; | ||
var fakeCACert = fs.readFileSync(__dirname + "/ca/ca.crt"), | ||
fakeCAKey = fs.readFileSync(__dirname + "/ca/ca.key"); | ||
var fakeKey = | ||
"-----BEGIN PRIVATE KEY-----\n" + | ||
"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALYg5xYLdh/pWqwD\n" + | ||
"gMEPHa88nJgLW7B5MoRFxNvGp2mXsgAm9TA8ac4eHBvh8tMoIInpDkRT5oxrGN8H\n" + | ||
"hlU5wDSSuuhYaq0I63o5daIdJopb+edLVfqRcskNmvIGoGxd3nylNWIsQQPZ6slg\n" + | ||
"Pblh49pyy533fWij0u4jqnnUGelBAgMBAAECgYAhHhiHJKxlHxyyvKxT7ri6Ha5n\n" + | ||
"42DX1SH/dWRXhmb4x3HBn1PkYofmyAjadRqflONd0Hgcqpj4nZzXKVoe8zJkzeCZ\n" + | ||
"ydivuH3pL/n/nQryvX3XHYcYXRUccoq/cDmHOEV6nBLElVryqXYJMBZdFMWYYevE\n" + | ||
"Oqeaim1p4M0od8Z/AQJBAPJQrrwTccBNuwcDbCQfRd5yqVY0AWbL12zOR+9Cfrws\n" + | ||
"9D3lthbH9ZRuTxAs0WL7RH26gXBBf5BDxmoEsw9nO1ECQQDAag90HcxY4svwMSEi\n" + | ||
"aXdOnuxs/03HsjtiC+3YiHPw3F7Nfhockmzu9qyp6b23ZvXn6q1ULNNxhadSuhex\n" + | ||
"MXLxAkEAyIUd5AOPOVzZrXcWkVnTvr5SBUTp+AAtWBvoCUWUjPICeApUwctdHSSf\n" + | ||
"hrof1/IofobNQHDjOCXt1qPm7ZM20QJAOydgIN6YWCtBb1JrUV0DJNSO8uN6Ug5l\n" + | ||
"Wzs3n/4zRrU5IAvIk0gg3UZQxtvpS10H9IidSOePCbOBQVmctwjwwQJBAPGYg4PL\n" + | ||
"Y3Bs0u9IVS6HhVLCTdorgcxDs03czDK819UZmZb7O8jdc5QlJBniLBR/lrHV3IbJ\n" + | ||
"y4S/YbSQ7jvaGxU=\n" + | ||
"-----END PRIVATE KEY-----\n"; | ||
/** | ||
* A fake HTTP/S server. | ||
* @constructor | ||
*/ | ||
var HTTPSServer = exports.HTTPSServer = function(handler) { | ||
return https.createServer({ | ||
cert: fakeCert, | ||
key: fakeKey | ||
}, handler); | ||
var keysReady = new EventEmitter(), | ||
keys; | ||
getNextSerial(function(err, serial) { | ||
if (err) return handler(err); | ||
getAllAltNames(function (err, altNames) { | ||
if (err) return handler(err); | ||
pem.createCertificate( | ||
{ | ||
days:365, | ||
serviceKey: fakeCAKey, | ||
serviceCertificate: fakeCACert, | ||
serial: serial, | ||
organization: "passport-tequila", | ||
commonName: "fake Passport-Tequila server", | ||
altNames: altNames | ||
}, | ||
function(err, data) { | ||
if (err) return handler(err); | ||
keys = data; | ||
keysReady.emit("ready"); | ||
}); | ||
}); | ||
}); | ||
var server; | ||
return { | ||
listen: function(port, cb) { | ||
keysReady.once("ready", function() { | ||
// console.log(keys.certificate + "\n" + keys.clientKey); | ||
server = https.createServer({ | ||
cert: keys.certificate, | ||
key: keys.clientKey | ||
}, handler); | ||
server.listen(port, cb); | ||
}); | ||
if (keys) keysReady.emit("ready"); | ||
}, | ||
address: function() { | ||
return server.address(); | ||
} | ||
}; | ||
}; | ||
function requestWithFakeCert(params) { | ||
function getAllAltNames(done) { | ||
var interfaces = os.networkInterfaces(), | ||
altNames = ["localhost", os.hostname()]; | ||
function addAltName(altName) { | ||
if (altNames.indexOf(altName) === -1) { | ||
altNames.push(altName); | ||
} | ||
} | ||
for (var ifname in interfaces) { | ||
interfaces[ifname].forEach(function(address) { | ||
addAltName(address.address); | ||
}); | ||
} | ||
var fqdn = require("fqdn"); | ||
fqdn(function(err, res) { | ||
if (err) return done(err); | ||
altNames.push(res); | ||
done(null, altNames); | ||
}); | ||
} | ||
function requestWithFakeCA(params) { | ||
if (! params.agentOptions) params.agentOptions = {}; | ||
params.agentOptions.ca = fakeCert; | ||
params.agentOptions.ca = fakeCACert; | ||
return request(params, params.callback); | ||
} | ||
function getRandomInt(min, max) { | ||
return Math.floor(Math.random() * (max - min)) + min; | ||
} | ||
/* Firefox hates certs with the same serial from the same CA. */ | ||
function getNextSerial(cb) { | ||
cb(null, getRandomInt(1, Math.pow(2, 32))); | ||
} | ||
/** | ||
@@ -224,3 +268,3 @@ * Like real request, but accepts the fake cert as legitimate | ||
var params = request.initParams(uri, options, callback); | ||
return requestWithFakeCert(params); | ||
return requestWithFakeCA(params); | ||
}; | ||
@@ -231,3 +275,3 @@ | ||
params.method = "post"; | ||
return requestWithFakeCert(params); | ||
return requestWithFakeCA(params); | ||
}; | ||
@@ -238,4 +282,10 @@ | ||
params.method = "get"; | ||
return requestWithFakeCert(params); | ||
return requestWithFakeCA(params); | ||
}; | ||
/** | ||
* @returns {string} The certificate of the CA that clients must trust | ||
*/ | ||
exports.getCACert = function() { | ||
return fakeCACert; | ||
}; |
var chai = require('chai'), | ||
expect = chai.expect, | ||
Q = require('Q'), | ||
_ = require('underscore'); | ||
_ = require('underscore'), | ||
ip = require('ip'); | ||
@@ -14,2 +15,3 @@ var fakes = require('../fakes'), | ||
}); | ||
it("serves", function (done) { | ||
@@ -22,2 +24,11 @@ Q.nfcall(request, 'https://localhost:' + server.port + "/404") | ||
}); | ||
var localIp = ip.address(); | ||
it("serves on all interfaces", (! localIp) ? undefined : function (done) { | ||
Q.nfcall(request, 'https://' + localIp + ':' + server.port + "/404") | ||
.should.be.fulfilled.then(function (callbackArgs) { | ||
var res = callbackArgs[0]; | ||
expect(res.statusCode).to.equal(404); | ||
}).should.notify(done); | ||
}); | ||
it("serves on /cgi-bin/tequila/createrequest", function (done) { | ||
@@ -37,3 +48,3 @@ Q.nfcall(request.post, { | ||
var matched = String(body).match(/key=(.*)/); | ||
expect(matched).to.be.ok; | ||
expect(matched).to.be.an('Array'); | ||
var key = matched[1]; | ||
@@ -40,0 +51,0 @@ var expectedRequest = { |
@@ -0,0 +0,0 @@ var assert = require('assert'), |
Sorry, the diff of this file is not supported yet
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
46468
12
756
2
15
2