Skip to content

Commit e66dc0b

Browse files
committed
Finalizing revoke ok invite
1 parent c247153 commit e66dc0b

5 files changed

Lines changed: 47 additions & 4 deletions

File tree

src/appTemplates/Collector.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const { HDSLibError } = require('../errors');
22
const { waitUntilFalse } = require('../utils');
33
const CollectorInvite = require('./CollectorInvite');
4+
const logger = require('../logger');
45

56
const COLLECTOR_STREAMID_SUFFIXES = {
67
archive: 'archive',
@@ -328,6 +329,15 @@ class Collector {
328329
* @returns {CollectorInvite}
329330
*/
330331
async revokeInvite (invite) {
332+
// Invalidate Invite APIEndpoint(s)
333+
if (invite.status === 'active') { // invalidate eventual authorization granted
334+
const accessInfo = await invite.checkAndGetAccessInfo(true);
335+
const deletionResult = await invite.connection.apiOne('accesses.delete', { id: accessInfo.id });
336+
if (deletionResult?.accessDeletion?.id == null) {
337+
logger.warn(`Failed revoking invite access for ${accessInfo.name}`);
338+
}
339+
}
340+
331341
// invalidate this access
332342
const updateInvite = {
333343
id: invite.eventData.id,
@@ -336,7 +346,6 @@ class Collector {
336346
streamIds: [this.streamIdFor(Collector.STREAMID_SUFFIXES.error)]
337347
}
338348
};
339-
// TODO revoke updateInvite.apiEndPoint
340349

341350
updateInvite.update.content.errorType = 'revoked';
342351
const eventData = await this.appManaging.connection.apiOne('events.update', updateInvite, 'event');

src/appTemplates/CollectorInvite.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,20 @@ class CollectorInvite {
6969
} catch (e) {
7070
this.#accessInfo = null;
7171
if (e.response?.body?.error?.id === 'invalid-access-token') {
72-
await this.collector.revokeInvite(this);
72+
await this.revoke();
7373
return null;
7474
}
7575
throw e;
7676
}
7777
}
7878

79+
/**
80+
* revoke the invite
81+
*/
82+
async revoke () {
83+
return this.collector.revokeInvite(this);
84+
}
85+
7986
get displayName () {
8087
return this.eventData.content.name;
8188
}

tests/apptemplates.test.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ describe('[APTX] appTemplates', function () {
294294
assert.equal(invitesFromInbox[0].errorType, 'refused');
295295
});
296296

297-
it('[APCR] Collector invite revoke', async () => {
297+
it('[APCR] Collector Client invite revoke', async () => {
298298
const { collector, collectorClient, invite } = await helperNewInvite(appManaging, appClient, 'APCR');
299299
await collectorClient.accept();
300300

@@ -314,6 +314,29 @@ describe('[APTX] appTemplates', function () {
314314
assert.equal(invite.status, 'error');
315315
assert.equal(invite.errorType, 'revoked');
316316
});
317+
318+
it('[APCM] Collector (manager) invite revoke after accept', async () => {
319+
const { collector, collectorClient, invite } = await helperNewInvite(appManaging, appClient, 'APCM');
320+
await collectorClient.accept();
321+
322+
// check collector
323+
const invitesFromInbox1 = await collector.checkInbox();
324+
assert.equal(invitesFromInbox1[0], invite);
325+
assert.equal(invite.status, 'active');
326+
327+
// revoke invitation
328+
await invite.revoke();
329+
assert.equal(invite.status, 'error');
330+
assert.equal(invite.errorType, 'revoked');
331+
332+
// check if authorization is revoked
333+
try {
334+
await invite.connection.accessInfo();
335+
throw new Error('Should be forbidden');
336+
} catch (e) {
337+
assert(e.message === 'Forbidden');
338+
}
339+
});
317340
});
318341

319342
describe('[APEX] Errors ', () => {

types/appTemplates/Collector.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ declare class Collector {
7676
* @param {CollectorInvite} invite
7777
* @returns {CollectorInvite}
7878
*/
79-
private revokeInvite;
79+
private revokeInvite(): Promise<CollectorInvite>;
8080
/**
8181
* check if required streams are present, if not create them
8282
*/

types/appTemplates/CollectorInvite.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,9 @@ declare class CollectorInvite {
4141
apiEndpoint: string;
4242
eventId: string;
4343
}>;
44+
/**
45+
* revoke the invite
46+
*/
47+
revoke(): Promise<void>;
4448
#private;
4549
}

0 commit comments

Comments
 (0)