test: Check for valid IDP when creating an identity.

This commit is contained in:
Hayden Young 2023-09-04 17:35:01 +01:00
parent a552bde0b0
commit cc2ee0fe2a
6 changed files with 40 additions and 7 deletions

View File

@ -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)

View File

@ -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}`)

View File

@ -1,5 +0,0 @@
const BadIdentityProvider = () => () => {
}
export default BadIdentityProvider

5
test/fixtures/providers/no-type.js vendored Normal file
View File

@ -0,0 +1,5 @@
const NoTypeIdentityProvider = () => () => {
}
export default NoTypeIdentityProvider

View File

@ -0,0 +1,11 @@
const type = 'no-verify-identity'
const NoVerifyIdentityIdentityProvider = () => () => {
return {
type
}
}
NoVerifyIdentityIdentityProvider.type = type
export default NoVerifyIdentityIdentityProvider

View File

@ -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\'')
})
})
})