@tomei/sso 0.40.4 → 0.41.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomei/sso",
3
- "version": "0.40.4",
3
+ "version": "0.41.0",
4
4
  "description": "Tomei SSO Package",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -328,4 +328,104 @@ export class APIKey extends ObjectBase {
328
328
  throw error;
329
329
  }
330
330
  }
331
+
332
+ public async revoke(
333
+ apiKey: string,
334
+ loginUser: LoginUser,
335
+ dbTransaction: any,
336
+ reason?: string,
337
+ ) {
338
+ try {
339
+ // Part 1: Prepare Required Params
340
+ // Ensure apiKey, loginUser, and dbTransaction are provided.
341
+ // Retrieve the existing API key record from the database using the provided apiKey.
342
+ const apiKeyRecord = await APIKey._Repo.findOne({
343
+ where: { ApiKey: apiKey },
344
+ transaction: dbTransaction,
345
+ });
346
+ if (!apiKeyRecord) {
347
+ throw new ClassError(
348
+ 'APIKey',
349
+ 'APIKeyErrMsgO3',
350
+ 'API key not found.',
351
+ 'revoke',
352
+ );
353
+ }
354
+ const EntityValueBefore = {
355
+ ...apiKeyRecord.get({ plain: true }),
356
+ };
357
+
358
+ // Part 2: Revoke API Key
359
+ // Mark the API key as revoked:
360
+ // Set the Status to "Revoked".
361
+ apiKeyRecord.Status = APIKeyStatusEnum.REVOKED;
362
+ // Set the RevokedAt timestamp to the current date and time.\
363
+ apiKeyRecord.RevokedAt = new Date();
364
+ // Set the RevokedById to loginUser.UserId.
365
+ apiKeyRecord.RevokedById = loginUser.UserId;
366
+ // Optionally, set the revocation reason:
367
+ // If the reason parameter is provided, store it in the RevokedReason attribute.
368
+ if (reason) {
369
+ apiKeyRecord.RevokedReason = reason;
370
+ }
371
+
372
+ // Part 3: Save API Key to Database
373
+ // Call APIKey._Repo.update() by passing:
374
+ // The updated APIKey instance
375
+ // dbTransaction.
376
+ await APIKey._Repo.update(
377
+ {
378
+ ...apiKeyRecord.get({ plain: true }),
379
+ },
380
+ {
381
+ where: { APIKeyId: apiKeyRecord.APIKeyId },
382
+ transaction: dbTransaction,
383
+ },
384
+ );
385
+
386
+ // Part 4: Record Update API Key Activity
387
+ // Initialise EntityValueBefore variable and set to empty object.
388
+ // Initialise EntityValueAfter variable and set to this APIKey instance.
389
+ const EntityValueAfter = {
390
+ ...apiKeyRecord.get({ plain: true }),
391
+ };
392
+ // Instantiate new activity from Activity class, call createId() method, then set:
393
+ // Action: ActionEnum.Create
394
+ // Description: "Revoke API key."
395
+ // EntityType: "APIKey"
396
+ // EntityId: <this.APIKeyId>
397
+ // EntityValueBefore: EntityValueBefore
398
+ // EntityValueAfter: EntityValueAfter
399
+ const activity = new Activity();
400
+ activity.ActivityId = activity.createId();
401
+ activity.Action = ActionEnum.UPDATE;
402
+ activity.Description = 'Revoke API key.';
403
+ activity.EntityType = 'APIKey';
404
+ activity.EntityId = apiKeyRecord.APIKeyId.toString();
405
+ activity.EntityValueBefore = JSON.stringify(EntityValueBefore);
406
+ activity.EntityValueAfter = JSON.stringify(EntityValueAfter);
407
+ // Call new activity create method by passing:
408
+ // dbTransaction
409
+ // userId: loginUser.ObjectId
410
+ await activity.create(loginUser.ObjectId, dbTransaction);
411
+
412
+ // Part 5: Returns
413
+ // Translate the updated APIKey entity into an object and return the following fields:
414
+ // ApiKey
415
+ // Status: "Revoked"
416
+ // RevokedAt
417
+ // RevokedById
418
+ // RevokedByName
419
+ // RevokedReason
420
+ return {
421
+ ApiKey: apiKeyRecord.ApiKey,
422
+ Status: apiKeyRecord.Status,
423
+ RevokedAt: apiKeyRecord.RevokedAt,
424
+ RevokedById: apiKeyRecord.RevokedById,
425
+ RevokedReason: apiKeyRecord.RevokedReason,
426
+ };
427
+ } catch (error) {
428
+ throw error;
429
+ }
430
+ }
331
431
  }