From cc2ee0fe2a4a11b83c29c9fc85ee77e2c0efec9e Mon Sep 17 00:00:00 2001 From: Hayden Young Date: Mon, 4 Sep 2023 17:35:01 +0100 Subject: [PATCH] test: Check for valid IDP when creating an identity. --- src/identities/identities.js | 5 +++++ src/identities/providers/index.js | 4 ++++ test/fixtures/providers/bad.js | 5 ----- test/fixtures/providers/no-type.js | 5 +++++ test/fixtures/providers/no-verify-identity.js | 11 +++++++++++ test/identities/identities.test.js | 17 +++++++++++++++-- 6 files changed, 40 insertions(+), 7 deletions(-) delete mode 100644 test/fixtures/providers/bad.js create mode 100644 test/fixtures/providers/no-type.js create mode 100644 test/fixtures/providers/no-verify-identity.js diff --git a/src/identities/identities.js b/src/identities/identities.js index 37e118e..cc0ac53 100644 --- a/src/identities/identities.js +++ b/src/identities/identities.js @@ -74,6 +74,11 @@ const Identities = async ({ keystore, path, storage, ipfs } = {}) => { const DefaultIdentityProviderType = getIdentityProvider('publickey') const IdentityProvider = options.provider || DefaultIdentityProviderType({ keystore }) const identityProvider = IdentityProvider() + + if (!getIdentityProvider(identityProvider.type)) { + throw new Error('Identity provider is unknown. Use addIdentityProvider(provider) to register the identity provider') + } + const id = await identityProvider.getId(options) const privateKey = await keystore.getKey(id) || await keystore.createKey(id) const publicKey = keystore.getPublic(privateKey) diff --git a/src/identities/providers/index.js b/src/identities/providers/index.js index e4c7c1a..78bf91b 100644 --- a/src/identities/providers/index.js +++ b/src/identities/providers/index.js @@ -35,6 +35,10 @@ const addIdentityProvider = (IdentityProvider) => { typeof IdentityProvider.type !== 'string') { throw new Error('Given IdentityProvider doesn\'t have a field \'type\'') } + + if (!IdentityProvider.verifyIdentity) { + throw new Error('Given IdentityProvider doesn\'t have a function \'verifyIdentity\'') + } if (identityProviders[IdentityProvider.type]) { throw new Error(`Type already added: ${IdentityProvider.type}`) diff --git a/test/fixtures/providers/bad.js b/test/fixtures/providers/bad.js deleted file mode 100644 index 2697f09..0000000 --- a/test/fixtures/providers/bad.js +++ /dev/null @@ -1,5 +0,0 @@ -const BadIdentityProvider = () => () => { - -} - -export default BadIdentityProvider \ No newline at end of file diff --git a/test/fixtures/providers/no-type.js b/test/fixtures/providers/no-type.js new file mode 100644 index 0000000..4d565d8 --- /dev/null +++ b/test/fixtures/providers/no-type.js @@ -0,0 +1,5 @@ +const NoTypeIdentityProvider = () => () => { + +} + +export default NoTypeIdentityProvider \ No newline at end of file diff --git a/test/fixtures/providers/no-verify-identity.js b/test/fixtures/providers/no-verify-identity.js new file mode 100644 index 0000000..42dae8e --- /dev/null +++ b/test/fixtures/providers/no-verify-identity.js @@ -0,0 +1,11 @@ +const type = 'no-verify-identity' + +const NoVerifyIdentityIdentityProvider = () => () => { + return { + type + } +} + +NoVerifyIdentityIdentityProvider.type = type + +export default NoVerifyIdentityIdentityProvider \ No newline at end of file diff --git a/test/identities/identities.test.js b/test/identities/identities.test.js index 23ca039..d965fcb 100644 --- a/test/identities/identities.test.js +++ b/test/identities/identities.test.js @@ -7,7 +7,8 @@ import { Identities, addIdentityProvider, getIdentityProvider, Identity, PublicK import testKeysPath from '../fixtures/test-keys-path.js' import { default as CustomIdentityProvider } from '../fixtures/providers/custom.js' import { default as FakeIdentityProvider } from '../fixtures/providers/fake.js' -import { default as BadIdentityProvider } from '../fixtures/providers/bad.js' +import { default as NoTypeIdentityProvider } from '../fixtures/providers/no-type.js' +import { default as NoVerifyIdentityIdentityProvider } from '../fixtures/providers/no-verify-identity.js' const type = 'publickey' const keysPath = './testkeys' @@ -353,12 +354,24 @@ describe('Identities', function () { let err try { - addIdentityProvider(BadIdentityProvider) + addIdentityProvider(NoTypeIdentityProvider) } catch (e) { err = e.toString() } assert.strictEqual(err, 'Error: Given IdentityProvider doesn\'t have a field \'type\'') }) + + it('cannot add an identity provider with missing verifyIdentity', async() => { + let err + + try { + addIdentityProvider(NoVerifyIdentityIdentityProvider) + } catch (e) { + err = e.toString() + } + + assert.strictEqual(err, 'Error: Given IdentityProvider doesn\'t have a function \'verifyIdentity\'') + }) }) })