From be7c4a46cfcecb02a74eaf99382480933f427601 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Wed, 5 Aug 2020 23:03:11 +0200 Subject: [PATCH] fix: remove http api support for key.export --- packages/interface-ipfs-core/package.json | 1 + .../interface-ipfs-core/src/key/export.js | 37 --------------- .../interface-ipfs-core/src/key/import.js | 19 ++++---- packages/interface-ipfs-core/src/key/index.js | 1 - packages/ipfs-http-client/src/key/export.js | 26 ----------- packages/ipfs-http-client/src/key/index.js | 1 - packages/ipfs/src/http/api/resources/key.js | 44 ------------------ packages/ipfs/src/http/api/routes/key.js | 5 --- packages/ipfs/test/http-api/inject/key.js | 45 ------------------- 9 files changed, 11 insertions(+), 168 deletions(-) delete mode 100644 packages/interface-ipfs-core/src/key/export.js delete mode 100644 packages/ipfs-http-client/src/key/export.js diff --git a/packages/interface-ipfs-core/package.json b/packages/interface-ipfs-core/package.json index cff0f8dfdb..d9b83216d9 100644 --- a/packages/interface-ipfs-core/package.json +++ b/packages/interface-ipfs-core/package.json @@ -52,6 +52,7 @@ "it-drain": "^1.0.1", "it-last": "^1.0.1", "it-pushable": "^1.3.1", + "libp2p-crypto": "^0.17.9", "multiaddr": "^7.4.3", "multibase": "^1.0.1", "multihashing-async": "^1.0.0", diff --git a/packages/interface-ipfs-core/src/key/export.js b/packages/interface-ipfs-core/src/key/export.js deleted file mode 100644 index 160af76ce4..0000000000 --- a/packages/interface-ipfs-core/src/key/export.js +++ /dev/null @@ -1,37 +0,0 @@ -/* eslint-env mocha */ -'use strict' - -const { nanoid } = require('nanoid') -const { getDescribe, getIt, expect } = require('../utils/mocha') -const testTimeout = require('../utils/test-timeout') - -/** @typedef { import("ipfsd-ctl/src/factory") } Factory */ -/** - * @param {Factory} common - * @param {Object} options - */ -module.exports = (common, options) => { - const describe = getDescribe(options) - const it = getIt(options) - - describe('.key.export', () => { - let ipfs - - before(async () => { - ipfs = (await common.spawn()).api - }) - - after(() => common.clean()) - - it('should respect timeout option when exporting a key', () => { - return testTimeout(() => ipfs.key.export('self', nanoid(), { - timeout: 1 - })) - }) - - it('should export "self" key', async function () { - const pem = await ipfs.key.export('self', nanoid()) - expect(pem).to.exist() - }) - }) -} diff --git a/packages/interface-ipfs-core/src/key/import.js b/packages/interface-ipfs-core/src/key/import.js index 6bc116e6c6..9c7721ad65 100644 --- a/packages/interface-ipfs-core/src/key/import.js +++ b/packages/interface-ipfs-core/src/key/import.js @@ -2,6 +2,7 @@ 'use strict' const { nanoid } = require('nanoid') +const keys = require('libp2p-crypto/src/keys') const { getDescribe, getIt, expect } = require('../utils/mocha') const testTimeout = require('../utils/test-timeout') @@ -26,10 +27,10 @@ module.exports = (common, options) => { it('should respect timeout option when importing a key', async () => { const password = nanoid() - const pem = await ipfs.key.export('self', password) - expect(pem).to.exist() + const key = await keys.generateKeyPair('ed25519') + const exported = key.export(password) - await testTimeout(() => ipfs.key.import('derp', pem, password, { + await testTimeout(() => ipfs.key.import('derp', exported, password, { timeout: 1 })) }) @@ -37,13 +38,13 @@ module.exports = (common, options) => { it('should import an exported key', async () => { const password = nanoid() - const pem = await ipfs.key.export('self', password) - expect(pem).to.exist() + const key = await keys.generateKeyPair('ed25519') + const exported = await key.export(password) - const key = await ipfs.key.import('clone', pem, password) - expect(key).to.exist() - expect(key).to.have.property('name', 'clone') - expect(key).to.have.property('id') + const importedKey = await ipfs.key.import('clone', exported, password) + expect(importedKey).to.exist() + expect(importedKey).to.have.property('name', 'clone') + expect(importedKey).to.have.property('id') }) }) } diff --git a/packages/interface-ipfs-core/src/key/index.js b/packages/interface-ipfs-core/src/key/index.js index cbe2aaa358..a96414e4a0 100644 --- a/packages/interface-ipfs-core/src/key/index.js +++ b/packages/interface-ipfs-core/src/key/index.js @@ -6,7 +6,6 @@ const tests = { list: require('./list'), rename: require('./rename'), rm: require('./rm'), - export: require('./export'), import: require('./import') } diff --git a/packages/ipfs-http-client/src/key/export.js b/packages/ipfs-http-client/src/key/export.js deleted file mode 100644 index 1692fef16f..0000000000 --- a/packages/ipfs-http-client/src/key/export.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict' - -const configure = require('../lib/configure') -const toUrlSearchParams = require('../lib/to-url-search-params') - -module.exports = configure(api => { - return async (name, password, options = {}) => { - if (typeof password !== 'string') { - options = password || {} - password = null - } - - const res = await api.post('key/export', { - timeout: options.timeout, - signal: options.signal, - searchParams: toUrlSearchParams({ - arg: name, - password: password, - ...options - }), - headers: options.headers - }) - - return res.text() - } -}) diff --git a/packages/ipfs-http-client/src/key/index.js b/packages/ipfs-http-client/src/key/index.js index de12c732c8..c9d9c59f08 100644 --- a/packages/ipfs-http-client/src/key/index.js +++ b/packages/ipfs-http-client/src/key/index.js @@ -5,6 +5,5 @@ module.exports = config => ({ list: require('./list')(config), rename: require('./rename')(config), rm: require('./rm')(config), - export: require('./export')(config), import: require('./import')(config) }) diff --git a/packages/ipfs/src/http/api/resources/key.js b/packages/ipfs/src/http/api/resources/key.js index b9d2a5b44d..c935f9a6a0 100644 --- a/packages/ipfs/src/http/api/resources/key.js +++ b/packages/ipfs/src/http/api/resources/key.js @@ -181,50 +181,6 @@ exports.gen = { } } -exports.export = { - options: { - validate: { - options: { - allowUnknown: true, - stripUnknown: true - }, - query: Joi.object().keys({ - name: Joi.string().required(), - password: Joi.string().required(), - timeout: Joi.timeout() - }) - .rename('arg', 'name', { - override: true, - ignoreUndefined: true - }) - } - }, - handler: async (request, h) => { - const { - app: { - signal - }, - server: { - app: { - ipfs - } - }, - query: { - name, - password, - timeout - } - } = request - - const pem = await ipfs.key.export(name, password, { - signal, - timeout - }) - - return h.response(pem).type('application/x-pem-file') - } -} - exports.import = { options: { validate: { diff --git a/packages/ipfs/src/http/api/routes/key.js b/packages/ipfs/src/http/api/routes/key.js index 8290f617e5..c4bdb42bb3 100644 --- a/packages/ipfs/src/http/api/routes/key.js +++ b/packages/ipfs/src/http/api/routes/key.js @@ -23,11 +23,6 @@ module.exports = [ path: '/api/v0/key/rename', ...resources.key.rename }, - { - method: 'POST', - path: '/api/v0/key/export', - ...resources.key.export - }, { method: 'POST', path: '/api/v0/key/import', diff --git a/packages/ipfs/test/http-api/inject/key.js b/packages/ipfs/test/http-api/inject/key.js index 96cc59cd2b..7ae199b2e4 100644 --- a/packages/ipfs/test/http-api/inject/key.js +++ b/packages/ipfs/test/http-api/inject/key.js @@ -18,7 +18,6 @@ describe('/key', function () { rm: sinon.stub(), rename: sinon.stub(), gen: sinon.stub(), - export: sinon.stub(), import: sinon.stub() } } @@ -228,50 +227,6 @@ describe('/key', function () { }) }) - describe('/export', () => { - const defaultOptions = { - signal: sinon.match.instanceOf(AbortSignal), - timeout: undefined - } - - it('only accepts POST', () => { - return testHttpMethod('/api/v0/key/export') - }) - - it('should export a key', async () => { - const name = 'name' - const password = 'password' - - ipfs.key.export.withArgs(name, password, defaultOptions).returns('pem') - - const res = await http({ - method: 'POST', - url: `/api/v0/key/export?arg=${name}&password=${password}` - }, { ipfs }) - - expect(res).to.have.property('statusCode', 200) - expect(res).to.have.property('result', 'pem') - }) - - it('accepts a timeout', async () => { - const name = 'name' - const password = 'password' - - ipfs.key.export.withArgs(name, password, { - ...defaultOptions, - timeout: 1000 - }).returns('pem') - - const res = await http({ - method: 'POST', - url: `/api/v0/key/export?arg=${name}&password=${password}&timeout=1s` - }, { ipfs }) - - expect(res).to.have.property('statusCode', 200) - expect(res).to.have.property('result', 'pem') - }) - }) - describe('/import', () => { const defaultOptions = { signal: sinon.match.instanceOf(AbortSignal),