From a143c7836932dc26419fea42531b1f42a7bd9f07 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sat, 27 Aug 2016 14:31:50 -0700 Subject: [PATCH] config: add querystring parsing. --- browser/index.html | 35 +++++------------ lib/net/peer.js | 4 ++ lib/node/config.js | 98 ++++++++++++++++++++++++++++++++++++++-------- lib/utils/uri.js | 6 ++- 4 files changed, 100 insertions(+), 43 deletions(-) diff --git a/browser/index.html b/browser/index.html index 4915fd27..a4da225d 100644 --- a/browser/index.html +++ b/browser/index.html @@ -105,7 +105,7 @@ more bitcoin magic). var newaddr = document.getElementById('newaddr'); var items = []; var scrollback = 0; - var logger, node; + var logger, node, options; body.onmouseup = function() { floating.style.display = 'none'; @@ -257,32 +257,17 @@ more bitcoin magic). }); } - var query = (function() { - var query = {}; - var search = (window.location.search + '').substring(1); - var s = search.split('&'); - var i, parts; - - for (i = 0; i < s.length; i++) { - parts = s[i].split('='); - if (parts[0]) - query[parts[0]] = parts[1]; - } - - return query; - })(); - - bcoin.set({ - network: query.network || 'segnet4', - useWorkers: true + options = bcoin.config({ + query: true, + network: 'segnet4', + useWorkers: true, + coinCache: true, + logger: logger }); - node = new bcoin.fullnode({ - prune: query.prune === 'true' || query.prune === '1', - logger: logger, - db: query.db || 'leveldb', - coinCache: true - }); + bcoin.set(options); + + node = new bcoin.fullnode(options); node.on('error', function(err) { ; diff --git a/lib/net/peer.js b/lib/net/peer.js index f0070bbf..b8017d2e 100644 --- a/lib/net/peer.js +++ b/lib/net/peer.js @@ -194,6 +194,10 @@ Peer.prototype._init = function init() { case 'ECONNRESET': self.ignore(); break; + default: + if (!self.connected) + self.ignore(); + break; } }); diff --git a/lib/node/config.js b/lib/node/config.js index c012f420..991a6540 100644 --- a/lib/node/config.js +++ b/lib/node/config.js @@ -44,10 +44,8 @@ config.alias = { */ config.parse = function parse(options) { - var env = {}; - var arg = {}; var data = {}; - var conf, prefix, filename, dirname; + var arg, conf, prefix, filename, dirname; if (!options) options = {}; @@ -55,8 +53,8 @@ config.parse = function parse(options) { merge(data, options); if (options.env) { - env = config.parseEnv(); - merge(data, env); + arg = config.parseEnv(); + merge(data, arg); } if (options.arg) { @@ -64,7 +62,12 @@ config.parse = function parse(options) { merge(data, arg); } - if (data.config) { + if (options.query) { + arg = config.parseQuery(); + merge(data, arg); + } + + if (data.config && !utils.isBrowser) { prefix = config.getPrefix(data); filename = data.config; @@ -272,7 +275,7 @@ config.parseConfig = function parseConfig(text, prefix, dirname) { if (eq === -1) { key = line.trim(); - value = null; + value = ''; } else { key = line.substring(0, eq).trim(); value = line.substring(eq + 1).trim(); @@ -330,15 +333,15 @@ config.parseArg = function parseArg(argv) { key = key.replace(/\-/g, ''); - alias = config.alias.arg[key]; - if (alias) - key = alias; + if (key.length === 0) + continue; if (value.length === 0) continue; - if (key.length === 0) - continue; + alias = config.alias.arg[key]; + if (alias) + key = alias; data[key] = value; @@ -404,16 +407,71 @@ config.parseEnv = function parseEnv(env) { key = key.substring(6); key = key.replace(/_/g, '').toLowerCase(); - alias = config.alias.env[key]; - if (alias) - key = alias; - if (key.length === 0) continue; if (value.length === 0) continue; + alias = config.alias.env[key]; + if (alias) + key = alias; + + data[key] = value; + } + + return config.parseData(data); +}; + +/** + * Parse querystring variables. + * @param {String} query + * @returns {Object} + */ + +config.parseQuery = function parseQuery(query) { + var data = {}; + var i, parts, index, pair, key, value, alias; + + if (!utils.isBrowser) + return data; + + if (query == null) { + query = utils.global.location.search; + if (typeof query !== 'string') + return data; + query = query.substring(1); + } + + parts = query.split('&'); + + for (i = 0; i < parts.length; i++) { + pair = parts[i]; + index = pair.indexOf('='); + + if (index === -1) { + key = pair; + value = ''; + } else { + key = pair.substring(0, index); + value = pair.substring(index + 1); + } + + key = unescape(key); + key = key.replace(/\-/g, '').toLowerCase(); + + if (key.length === 0) + continue; + + value = unescape(value); + + if (value.length === 0) + continue; + + alias = config.alias.env[key]; + if (alias) + key = alias; + data[key] = value; } @@ -646,6 +704,14 @@ function merge(a, b) { return a; } +function unescape(str) { + try { + str = decodeURIComponent(str).replace(/\+/g, ' '); + } finally { + return str.replace(/\0/g, ''); + } +} + /* * Expose */ diff --git a/lib/utils/uri.js b/lib/utils/uri.js index 5473a269..284a1bc8 100644 --- a/lib/utils/uri.js +++ b/lib/utils/uri.js @@ -160,8 +160,10 @@ function parsePairs(str) { if (key.length === 0) continue; - if (value.length > 0) - value = unescape(value); + value = unescape(value); + + if (value.length === 0) + continue; data[key] = value; }