diff --git a/src/api/procedures/__tests__/consumeJoinIdentityAuthorization.ts b/src/api/procedures/__tests__/consumeJoinIdentityAuthorization.ts index d7aba78256..6d7a4a5240 100644 --- a/src/api/procedures/__tests__/consumeJoinIdentityAuthorization.ts +++ b/src/api/procedures/__tests__/consumeJoinIdentityAuthorization.ts @@ -169,6 +169,12 @@ describe('consumeJoinIdentityAuthorization procedure', () => { result = await boundFunc(args); expect(result).toBe(false); + + args.accept = false; + args.authRequest.issuer = await mockContext.getCurrentIdentity(); + + result = await boundFunc(args); + expect(result).toBe(true); }); }); }); diff --git a/src/api/procedures/consumeJoinIdentityAuthorization.ts b/src/api/procedures/consumeJoinIdentityAuthorization.ts index 343e8be331..d9814a06bd 100644 --- a/src/api/procedures/consumeJoinIdentityAuthorization.ts +++ b/src/api/procedures/consumeJoinIdentityAuthorization.ts @@ -59,21 +59,28 @@ export async function prepareConsumeJoinIdentityAuthorization( */ export async function isAuthorized( this: Procedure, - { authRequest }: ConsumeJoinIdentityAuthorizationParams + { authRequest, accept }: ConsumeJoinIdentityAuthorizationParams ): Promise { - const { target } = authRequest; + const { target, issuer } = authRequest; const { context } = this; let condition; + let did: string; + const fetchDid = async (): Promise => did || (await context.getCurrentIdentity()).did; if (target instanceof Account) { const { address } = context.getCurrentAccount(); condition = address === target.address; } else { - const { did } = await context.getCurrentIdentity(); + did = await fetchDid(); condition = did === target.did; } + if (!accept) { + did = await fetchDid(); + condition = condition || did === issuer.did; + } + return condition && !authRequest.isExpired(); }