From 70739bc70720627246c6953fb209b3a07efab779 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Wed, 11 Dec 2019 15:18:23 +0000 Subject: [PATCH 1/2] refactor: convert bootstrap API to async/await --- src/core/components/bootstrap.js | 66 --------------------------- src/core/components/bootstrap/add.js | 34 ++++++++++++++ src/core/components/bootstrap/list.js | 8 ++++ src/core/components/bootstrap/rm.js | 39 ++++++++++++++++ src/core/components/index.js | 5 ++ src/core/components/init.js | 5 ++ src/core/components/start.js | 5 ++ src/core/components/stop.js | 5 ++ 8 files changed, 101 insertions(+), 66 deletions(-) delete mode 100644 src/core/components/bootstrap.js create mode 100644 src/core/components/bootstrap/add.js create mode 100644 src/core/components/bootstrap/list.js create mode 100644 src/core/components/bootstrap/rm.js diff --git a/src/core/components/bootstrap.js b/src/core/components/bootstrap.js deleted file mode 100644 index dad39cdd26..0000000000 --- a/src/core/components/bootstrap.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict' - -const defaultConfig = require('../runtime/config-nodejs.js') -const isMultiaddr = require('mafmt').IPFS.matches -const callbackify = require('callbackify') - -function isValidMultiaddr (ma) { - try { - return isMultiaddr(ma) - } catch (err) { - return false - } -} - -function invalidMultiaddrError (ma) { - return new Error(`${ma} is not a valid Multiaddr`) -} - -module.exports = function bootstrap (self) { - return { - list: callbackify(async () => { - const config = await self._repo.config.get() - - return { Peers: config.Bootstrap } - }), - add: callbackify.variadic(async (multiaddr, args = { default: false }) => { - if (multiaddr && !isValidMultiaddr(multiaddr)) { - throw invalidMultiaddrError(multiaddr) - } - - const config = await self._repo.config.get() - if (args.default) { - config.Bootstrap = defaultConfig().Bootstrap - } else if (multiaddr && config.Bootstrap.indexOf(multiaddr) === -1) { - config.Bootstrap.push(multiaddr) - } - await self._repo.config.set(config) - - return { - Peers: args.default ? defaultConfig().Bootstrap : [multiaddr] - } - }), - rm: callbackify.variadic(async (multiaddr, args = { all: false }) => { - if (multiaddr && !isValidMultiaddr(multiaddr)) { - throw invalidMultiaddrError(multiaddr) - } - - let res = [] - const config = await self._repo.config.get() - if (args.all) { - res = config.Bootstrap - config.Bootstrap = [] - } else { - config.Bootstrap = config.Bootstrap.filter((mh) => mh !== multiaddr) - } - - await self._repo.config.set(config) - - if (!args.all && multiaddr) { - res.push(multiaddr) - } - - return { Peers: res } - }) - } -} diff --git a/src/core/components/bootstrap/add.js b/src/core/components/bootstrap/add.js new file mode 100644 index 0000000000..1f28aca05f --- /dev/null +++ b/src/core/components/bootstrap/add.js @@ -0,0 +1,34 @@ +'use strict' + +const defaultConfig = require('../runtime/config-nodejs.js') +const isMultiaddr = require('mafmt').IPFS.matches + +function isValidMultiaddr (ma) { + try { + return isMultiaddr(ma) + } catch (err) { + return false + } +} + +module.exports = ({ repo }) => { + return async function add (multiaddr, options) { + options = options || {} + + if (multiaddr && !isValidMultiaddr(multiaddr)) { + throw new Error(`${multiaddr} is not a valid Multiaddr`) + } + + const config = await repo.config.get() + if (options.default) { + config.Bootstrap = defaultConfig().Bootstrap + } else if (multiaddr && config.Bootstrap.indexOf(multiaddr) === -1) { + config.Bootstrap.push(multiaddr) + } + await repo.config.set(config) + + return { + Peers: options.default ? defaultConfig().Bootstrap : [multiaddr] + } + } +} diff --git a/src/core/components/bootstrap/list.js b/src/core/components/bootstrap/list.js new file mode 100644 index 0000000000..bc21c6e708 --- /dev/null +++ b/src/core/components/bootstrap/list.js @@ -0,0 +1,8 @@ +'use strict' + +module.exports = ({ repo }) => { + return async function list () { + const config = await repo.config.get() + return { Peers: config.Bootstrap || [] } + } +} diff --git a/src/core/components/bootstrap/rm.js b/src/core/components/bootstrap/rm.js new file mode 100644 index 0000000000..98ecb45873 --- /dev/null +++ b/src/core/components/bootstrap/rm.js @@ -0,0 +1,39 @@ +'use strict' + +const isMultiaddr = require('mafmt').IPFS.matches + +function isValidMultiaddr (ma) { + try { + return isMultiaddr(ma) + } catch (err) { + return false + } +} + +module.exports = ({ repo }) => { + return async function rm (multiaddr, options) { + options = options || {} + + if (multiaddr && !isValidMultiaddr(multiaddr)) { + throw new Error(`${multiaddr} is not a valid Multiaddr`) + } + + let res = [] + const config = await repo.config.get() + + if (options.all) { + res = config.Bootstrap || [] + config.Bootstrap = [] + } else { + config.Bootstrap = (config.Bootstrap || []).filter(ma => ma !== multiaddr) + } + + await repo.config.set(config) + + if (!options.all && multiaddr) { + res.push(multiaddr) + } + + return { Peers: res } + } +} diff --git a/src/core/components/index.js b/src/core/components/index.js index 1abb7f4499..3694b47cc5 100644 --- a/src/core/components/index.js +++ b/src/core/components/index.js @@ -6,6 +6,11 @@ exports.bitswap = { unwant: require('./bitswap/unwant'), wantlist: require('./bitswap/wantlist') } +exports.bootstrap = { + add: require('./bootstrap/add'), + list: require('./bootstrap/list'), + rm: require('./bootstrap/rm') +} exports.config = require('./config') exports.id = require('./id') exports.init = require('./init') diff --git a/src/core/components/init.js b/src/core/components/init.js index e5b6788f63..46799a3283 100644 --- a/src/core/components/init.js +++ b/src/core/components/init.js @@ -314,6 +314,11 @@ function createApi ({ const api = { add, + bootstrap: { + add: Commands.bootstrap.add({ repo }), + list: Commands.bootstrap.list({ repo }), + rm: Commands.bootstrap.rm({ repo }) + }, config: Commands.config({ repo }), id: Commands.id({ peerInfo }), init: () => { throw new AlreadyInitializedError() }, diff --git a/src/core/components/start.js b/src/core/components/start.js index 5234820fa8..c182f44093 100644 --- a/src/core/components/start.js +++ b/src/core/components/start.js @@ -150,6 +150,11 @@ function createApi ({ unwant: Commands.bitswap.unwant({ bitswap }), wantlist: Commands.bitswap.wantlist({ bitswap }) }, + bootstrap: { + add: Commands.bootstrap.add({ repo }), + list: Commands.bootstrap.list({ repo }), + rm: Commands.bootstrap.rm({ repo }) + }, config: Commands.config({ repo }), id: Commands.id({ peerInfo }), init: () => { throw new AlreadyInitializedError() }, diff --git a/src/core/components/stop.js b/src/core/components/stop.js index 9be69ec1d6..6bfd49394a 100644 --- a/src/core/components/stop.js +++ b/src/core/components/stop.js @@ -112,6 +112,11 @@ function createApi ({ const api = { add, + bootstrap: { + add: Commands.bootstrap.add({ repo }), + list: Commands.bootstrap.list({ repo }), + rm: Commands.bootstrap.rm({ repo }) + }, config: Commands.config({ repo }), id: Commands.id({ peerInfo }), init: () => { throw new AlreadyInitializedError() }, From 2ca01ea6e7e3fe44a367bb621ebcdf50f9f90fab Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 16 Dec 2019 22:55:16 +0000 Subject: [PATCH 2/2] refactor: reuse ma validation fn --- src/core/components/bootstrap/add.js | 10 +--------- src/core/components/bootstrap/rm.js | 10 +--------- src/core/components/bootstrap/utils.js | 11 +++++++++++ 3 files changed, 13 insertions(+), 18 deletions(-) create mode 100644 src/core/components/bootstrap/utils.js diff --git a/src/core/components/bootstrap/add.js b/src/core/components/bootstrap/add.js index 1f28aca05f..6405d2b0d6 100644 --- a/src/core/components/bootstrap/add.js +++ b/src/core/components/bootstrap/add.js @@ -1,15 +1,7 @@ 'use strict' const defaultConfig = require('../runtime/config-nodejs.js') -const isMultiaddr = require('mafmt').IPFS.matches - -function isValidMultiaddr (ma) { - try { - return isMultiaddr(ma) - } catch (err) { - return false - } -} +const { isValidMultiaddr } = require('./utils') module.exports = ({ repo }) => { return async function add (multiaddr, options) { diff --git a/src/core/components/bootstrap/rm.js b/src/core/components/bootstrap/rm.js index 98ecb45873..070ae9bb14 100644 --- a/src/core/components/bootstrap/rm.js +++ b/src/core/components/bootstrap/rm.js @@ -1,14 +1,6 @@ 'use strict' -const isMultiaddr = require('mafmt').IPFS.matches - -function isValidMultiaddr (ma) { - try { - return isMultiaddr(ma) - } catch (err) { - return false - } -} +const { isValidMultiaddr } = require('./utils') module.exports = ({ repo }) => { return async function rm (multiaddr, options) { diff --git a/src/core/components/bootstrap/utils.js b/src/core/components/bootstrap/utils.js new file mode 100644 index 0000000000..4e525ce021 --- /dev/null +++ b/src/core/components/bootstrap/utils.js @@ -0,0 +1,11 @@ +'use strict' + +const isMultiaddr = require('mafmt').IPFS.matches + +exports.isValidMultiaddr = ma => { + try { + return isMultiaddr(ma) + } catch (err) { + return false + } +}