address npm's security audit warnings

This commit is contained in:
AJ ONeal 2019-02-28 01:42:56 -07:00
父節點 693a524549
當前提交 21115b9543
共有 7 個檔案被更改,包括 146 行新增228 行删除

查看文件

@ -12,6 +12,7 @@ var path = require('path');
var YAML = require('js-yaml');
var TOML = require('toml');
var TPLS = TOML.parse(fs.readFileSync(path.join(__dirname, "../lib/en-us.toml"), 'utf8'));
var JWT = require('../lib/jwt.js');
/*
if ('function' !== typeof TOML.stringify) {
@ -232,10 +233,9 @@ function askForConfig(state, mainCb) {
//console.info("\tPrivate key (hex)");
console.info("");
rl.question('auth: ', function (resp) {
var jwt = require('jsonwebtoken');
resp = (resp || '').trim();
try {
jwt.decode(resp);
JWT.decode(resp);
state.config.token = resp;
} catch(e) {
// is not jwt
@ -604,8 +604,8 @@ function parseConfig(err, text) {
}
state._connecting = true;
try {
require('jsonwebtoken').decode(token);
//console.log(require('jsonwebtoken').decode(token));
JWT.decode(token);
//console.log(JWT.decode(token));
} catch(e) {
console.warn("[warning] could not decode token");
}

查看文件

@ -114,7 +114,7 @@ common.otp = function getOtp() {
return Math.round(Math.random() * 9999).toString().padStart(4, '0');
};
common.signToken = function (state) {
var jwt = require('jsonwebtoken');
var JWT = require('./jwt.js');
var tokenData = {
domains: Object.keys(state.config.servernames || {}).filter(function (name) {
return /\./.test(name);
@ -127,7 +127,7 @@ common.signToken = function (state) {
, iss: Math.round(Date.now() / 1000)
};
return jwt.sign(tokenData, state.config.secret);
return JWT.sign(tokenData, state.config.secret);
};
common.promiseTimeout = function (ms) {
var tok;

查看文件

@ -118,7 +118,7 @@ common.otp = function getOtp() {
return Math.round(Math.random() * 9999).toString().padStart(4, '0');
};
common.signToken = function (state) {
var jwt = require('jsonwebtoken');
var JWT = require('./jwt.js');
var tokenData = {
domains: Object.keys(state.config.servernames || {}).filter(function (name) {
return /\./.test(name);
@ -131,7 +131,7 @@ common.signToken = function (state) {
, iss: Math.round(Date.now() / 1000)
};
return jwt.sign(tokenData, state.config.secret);
return JWT.sign(tokenData, state.config.secret);
};
common.api = {};
common.api.directory = function (state, next) {

19
lib/jwt-test.js Normal file
查看文件

@ -0,0 +1,19 @@
'use strict';
var crypto = require('crypto');
var FAT = require('jsonwebtoken');
var JWT = require('./jwt.js');
var key = "justanothersecretsecret";
var keyid = crypto.createHash('sha256').update(key).digest('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
var tok1 = FAT.sign({ foo: "hello" }, key, { keyid: keyid });
var tok2 = JWT.sign({ foo: "hello" }, key);
if (tok1 !== tok2) {
console.error(JWT.decode(tok1));
console.error(JWT.decode(tok2));
throw new Error("our jwt doesn't match auth0/jsonwebtoken");
}
console.info('Pass');

43
lib/jwt.js Normal file
查看文件

@ -0,0 +1,43 @@
'use strict';
var crypto = require('crypto');
var JWT = module.exports;
JWT.decode = function (jwt) {
var parts;
try {
parts = jwt.split('.');
return {
header: JSON.parse(Buffer.from(parts[0], 'base64'))
, payload: JSON.parse(Buffer.from(parts[1], 'base64'))
, signature: parts[2] //Buffer.from(parts[2], 'base64')
};
} catch(e) {
throw new Error("JWT Parse Error: could not split, base64 decode, and JSON.parse token " + jwt);
}
};
JWT.verify = function (jwt) {
var decoded = JWT.decode(jwt);
throw new Error("not implemented yet");
};
function base64ToUrlSafe(str) {
return str
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '')
;
}
JWT.sign = function (claims, key) {
if (!claims.iat && false !== claims.iat) {
claims.iat = Math.round(Date.now()/1000);
}
var thumb = base64ToUrlSafe(crypto.createHash('sha256').update(key).digest('base64'));
var protect = base64ToUrlSafe(Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT', kid: thumb })).toString('base64'));
var payload = base64ToUrlSafe(Buffer.from(JSON.stringify(claims)).toString('base64'));
var signature = base64ToUrlSafe(crypto.createHmac('sha256', key).update(protect + '.' + payload).digest('base64'));
return protect + '.' + payload + '.' + signature;
};

293
package-lock.json generated
查看文件

@ -19,28 +19,22 @@
}
},
"acme": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/acme/-/acme-1.1.0.tgz",
"integrity": "sha512-l2UAkE7aEKdYZ2dSok/ONxKLWj4HrSSPwuGsQE42LM8m6NukRXPKSWXyusqR4m+LhvN76183VvA8IDOOnLjSlw==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/acme/-/acme-1.2.0.tgz",
"integrity": "sha512-lG9Wq0Ol2OLpVrusq5OQ+KCT06rXaGjbHcDhKtNO6Hr3J3swISaCYi0slwLpEA9DGV+QhDkAnZ6qsXAo86SM5Q==",
"requires": {
"acme-v2": "^1.1.0",
"bluebird": "^3.5.1"
"acme-v2": "^1.3.1"
}
},
"acme-v2": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/acme-v2/-/acme-v2-1.1.0.tgz",
"integrity": "sha512-yODrKcfaqDwRM/nVZdupww7s7y/D1q6QMe8nbYPifVEO7JYi653FaoPbUFRXFKTEzFhJ4HNXZMGUKmLYJQq/Ag==",
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/acme-v2/-/acme-v2-1.5.2.tgz",
"integrity": "sha512-Ux0cFCxHeaGGeGyPGMLHBLIGF05OYaxuh4TvaVzwkVVRib/gPpioa50CGj2pnQimH/MRkg0VtWCEdfE45MV/0g==",
"requires": {
"@coolaj86/urequest": "^1.1.1",
"rsa-compat": "^1.3.0"
"@coolaj86/urequest": "^1.3.6",
"rsa-compat": "^1.9.2"
}
},
"any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@ -49,11 +43,6 @@
"sprintf-js": "~1.0.2"
}
},
"asn1js": {
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-1.2.12.tgz",
"integrity": "sha1-h9XueXWWri0qPLAkciDcQv/D8hE="
},
"async-limiter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
@ -64,6 +53,15 @@
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
"integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
@ -83,11 +81,6 @@
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
},
"buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"buffer-fill": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
@ -98,21 +91,10 @@
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
"integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="
},
"buffer-v6-polyfill": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/buffer-v6-polyfill/-/buffer-v6-polyfill-1.0.5.tgz",
"integrity": "sha1-0c2v61YAvvbCjWFElkJWvRLgFnc="
},
"certpem": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/certpem/-/certpem-1.0.1.tgz",
"integrity": "sha1-+koljEBXllxGVwCCL7jYB9fy2fU=",
"requires": {
"asn1js": "^1.2.12",
"buffer-v6-polyfill": "^1.0.3",
"node.extend": "^1.1.5",
"pkijs": "^1.3.27"
}
"cert-info": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/cert-info/-/cert-info-1.5.0.tgz",
"integrity": "sha512-3fE0DDJJ7FWwMsUqLqBd+FY5LQACK24R1p129BTCYMEe00Nql2Q9Dkr6TEBlZ8XJnNaSbjzf3qBLjLrD8KLutw=="
},
"core-util-is": {
"version": "1.0.2",
@ -158,14 +140,6 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ecdsa-sig-formatter": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz",
"integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -191,6 +165,12 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
"finalhandler": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
@ -219,16 +199,6 @@
"readable-stream": "^2.0.0"
}
},
"fs-symlink": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/fs-symlink/-/fs-symlink-1.2.1.tgz",
"integrity": "sha1-G+uoPqncqBI2AOPwuaUbGGQLvEA=",
"requires": {
"mkdirp": "^0.5.0",
"mkdirp-then": "1",
"mz": "^2.0.0"
}
},
"generate-function": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-1.1.0.tgz",
@ -252,28 +222,19 @@
}
},
"greenlock": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/greenlock/-/greenlock-2.3.2.tgz",
"integrity": "sha512-8jxb7gnKPMqUMBxa7ET3qTIALzEh30Na6TccIzaly62THZfiQtdPhVe9y26oaOEx5JGUMhc83FFo2hboeJz+ow==",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/greenlock/-/greenlock-2.6.7.tgz",
"integrity": "sha512-cN8PU0tbpTyd0JiNhP78n6ZUYWhQs9fh4cuLjusKt0TjX0limP/u26wYGNK1cbgb9NsOeiox/wRhpGPh6EBocg==",
"requires": {
"acme": "^1.0.6",
"acme-v2": "^1.0.6",
"asn1js": "^1.2.12",
"bluebird": "^3.5.1",
"certpem": "^1.0.0",
"acme": "^1.2.0",
"acme-v2": "^1.5.0",
"cert-info": "^1.5.0",
"le-challenge-fs": "^2.0.2",
"le-sni-auto": "^2.1.3",
"le-store-certbot": "^2.1.0",
"node.extend": "^1.1.5",
"pkijs": "^1.3.27",
"rsa-compat": "^1.4.0"
"le-store-certbot": "^2.1.7",
"rsa-compat": "^1.9.2"
}
},
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
},
"http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
@ -298,11 +259,6 @@
"from2": "^2.1.1"
}
},
"is": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz",
"integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU="
},
"is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
@ -313,22 +269,6 @@
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isemail": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz",
"integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo="
},
"joi": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz",
"integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=",
"requires": {
"hoek": "2.x.x",
"isemail": "1.x.x",
"moment": "2.x.x",
"topo": "1.x.x"
}
},
"js-yaml": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
@ -343,37 +283,6 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonwebtoken": {
"version": "7.4.3",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz",
"integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=",
"requires": {
"joi": "^6.10.1",
"jws": "^3.1.4",
"lodash.once": "^4.0.0",
"ms": "^2.0.0",
"xtend": "^4.0.1"
}
},
"jwa": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz",
"integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==",
"requires": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.10",
"safe-buffer": "^5.0.1"
}
},
"jws": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
"integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
"requires": {
"jwa": "^1.1.5",
"safe-buffer": "^5.0.1"
}
},
"keypairs": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/keypairs/-/keypairs-1.0.1.tgz",
@ -399,30 +308,23 @@
}
},
"le-sni-auto": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/le-sni-auto/-/le-sni-auto-2.1.5.tgz",
"integrity": "sha512-AUlFpYifutAAs0D0UwVVD5Jzf+X2J6+VNb03LCOFVAezQNpNcQFsWwrZzd+y24gF7jYHGBbD25q8gURQ5rhL8w==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/le-sni-auto/-/le-sni-auto-2.1.6.tgz",
"integrity": "sha512-LcfkF2yQ1nrep+ZfyG+SfR3pHphKFD3zMZ9FKervGfTfvgScCv/XGbX+vxsGZEKZjvzxKbFZ/5LdSCXuLXUU6A==",
"requires": {
"bluebird": "^3.5.1"
}
},
"le-store-certbot": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/le-store-certbot/-/le-store-certbot-2.1.3.tgz",
"integrity": "sha512-bUzbk4SfOKURUyLam4R7kI+7zGsO7/w/9mjeSDK+fAFLebjz/XND5VDzHotFEEbaOcu0UldD1/Dx3VShYnOFnw==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/le-store-certbot/-/le-store-certbot-2.2.1.tgz",
"integrity": "sha512-BhljZjTULhbNBAT6RBiv4TeZegFraMxURYEvh3WRUI048zmXf4ZfC8gwbdu5fnD2tTCsS9fbsCOAQyrFBl4jlA==",
"requires": {
"bluebird": "^3.5.1",
"fs-symlink": "^1.2.1",
"mkdirp": "^0.5.1",
"pyconf": "^1.1.2",
"safe-replace": "^1.0.2"
"pyconf": "^1.1.5",
"safe-replace": "^1.0.3"
}
},
"lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
"mime": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
@ -454,34 +356,16 @@
"minimist": "0.0.8"
}
},
"mkdirp-then": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz",
"integrity": "sha1-pJLIecpNhz9e5FAI+PVf0BUN48U=",
"requires": {
"any-promise": "^1.1.0",
"mkdirp": "^0.5.0"
}
},
"moment": {
"version": "2.22.2",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mz": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
"requires": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
"thenify-all": "^1.0.0"
}
"nan": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
"integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
"optional": true
},
"ndjson": {
"version": "1.5.0",
@ -516,13 +400,11 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
"node.extend": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz",
"integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=",
"requires": {
"is": "^3.1.0"
}
"node-forge": {
"version": "0.7.6",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
"integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
"optional": true
},
"object-assign": {
"version": "4.1.1",
@ -560,11 +442,6 @@
"pinkie": "^2.0.0"
}
},
"pkijs": {
"version": "1.3.33",
"resolved": "https://registry.npmjs.org/pkijs/-/pkijs-1.3.33.tgz",
"integrity": "sha1-ponvYhE7fDSOH/wJll0iOeW7TJI="
},
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
@ -585,9 +462,9 @@
}
},
"pyconf": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/pyconf/-/pyconf-1.1.5.tgz",
"integrity": "sha512-zXEg0oUJ4mY6azqVvRy6rePTIHZGhDQG3z9PVkE60uUabS9uILiIkHobU2Jzcs3tBltMBqyEATZZezRR/UFjkg==",
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/pyconf/-/pyconf-1.1.6.tgz",
"integrity": "sha512-4ujjwqch6nViWduSLc3/QFrDdJJAvAE7NRBarSGLANwh0tNW0MbXeJE8ZziJZvzRnUEN5scYwsS+ItYU1uj6dQ==",
"requires": {
"safe-replace": "^1.0.2"
}
@ -630,18 +507,12 @@
}
},
"rsa-compat": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/rsa-compat/-/rsa-compat-1.4.2.tgz",
"integrity": "sha512-Ic0WfTwdiZ8DlSRDe3frod/8XGCZufwnsH4ap+6Ldt+j9bCCxIyoJZwlCvAL2NDeEO7ax0p/H0FmypprDF6B6w==",
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/rsa-compat/-/rsa-compat-1.9.2.tgz",
"integrity": "sha512-XY4I/74W+QENMd99zVsyHQcxYxWTXd0EihVXsI4oeb1bz7DYxEKasQrjyzYPnR1tZT7fTPu5HP/vTKfs9lzdGA==",
"requires": {
"node-forge": "^0.6.41"
},
"dependencies": {
"node-forge": {
"version": "0.6.49",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.49.tgz",
"integrity": "sha1-8e6V1ddGI5OP4Z1piqWibVTS9g8="
}
"node-forge": "^0.7.6",
"ursa-optional": "^0.9.10"
}
},
"safe-buffer": {
@ -650,9 +521,9 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safe-replace": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/safe-replace/-/safe-replace-1.0.2.tgz",
"integrity": "sha1-sYGrQJWs32qwqPhAUXSRyoqZIro="
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-replace/-/safe-replace-1.1.0.tgz",
"integrity": "sha512-9/V2E0CDsKs9DWOOwJH7jYpSl9S3N05uyevNjvsnDauBqRowBPOyot1fIvV5N2IuZAbYyvrTXrYFVG0RZInfFw=="
},
"sclient": {
"version": "1.4.1",
@ -795,22 +666,6 @@
}
}
},
"thenify": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
"integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
"requires": {
"any-promise": "^1.0.0"
}
},
"thenify-all": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
"integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
"requires": {
"thenify": ">= 3.1.0 < 4"
}
},
"through2": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
@ -825,19 +680,21 @@
"resolved": "https://registry.npmjs.org/toml/-/toml-0.4.1.tgz",
"integrity": "sha1-Iv5QHFe+WpV9o4JcHd5YS7LmL3M="
},
"topo": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz",
"integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=",
"requires": {
"hoek": "2.x.x"
}
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"ursa-optional": {
"version": "0.9.10",
"resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.9.10.tgz",
"integrity": "sha512-RvEbhnxlggX4MXon7KQulTFiJQtLJZpSb9ZSa7ZTkOW0AzqiVTaLjI4vxaSzJBDH9dwZ3ltZadFiBaZslp6haA==",
"optional": true,
"requires": {
"bindings": "^1.3.0",
"nan": "^2.11.1"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",

查看文件

@ -55,9 +55,8 @@
"dependencies": {
"@coolaj86/urequest": "^1.3.5",
"finalhandler": "^1.1.1",
"greenlock": "^2.3.1",
"greenlock": "^2.6.7",
"js-yaml": "^3.11.0",
"jsonwebtoken": "^7.1.9",
"keypairs": "^1.0.1",
"mkdirp": "^0.5.1",
"proxy-packer": "^2.0.2",