@axinom/mosaic-cli 0.31.0-rc.7 → 0.31.0-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/commands/service/index.js +4 -47
  2. package/dist/commands/service/index.js.map +1 -1
  3. package/dist/commands/service/purge-permissions/purge-permissions-command.d.ts +3 -0
  4. package/dist/commands/service/purge-permissions/purge-permissions-command.js +45 -0
  5. package/dist/commands/service/purge-permissions/purge-permissions-command.js.map +1 -0
  6. package/dist/commands/service/purge-permissions/purge-permissions-options.d.ts +9 -0
  7. package/dist/commands/service/purge-permissions/purge-permissions-options.js +3 -0
  8. package/dist/commands/service/purge-permissions/purge-permissions-options.js.map +1 -0
  9. package/dist/commands/service/purge-permissions/purge-permissions.d.ts +3 -0
  10. package/dist/commands/service/purge-permissions/purge-permissions.js +55 -0
  11. package/dist/commands/service/purge-permissions/purge-permissions.js.map +1 -0
  12. package/dist/commands/service/sync-permissions/sync-permission-command.d.ts +3 -0
  13. package/dist/commands/service/sync-permissions/sync-permission-command.js +50 -0
  14. package/dist/commands/service/sync-permissions/sync-permission-command.js.map +1 -0
  15. package/dist/commands/service/sync-permissions/sync-permissions-options.js.map +1 -0
  16. package/dist/commands/service/sync-permissions/sync-permissions.js.map +1 -0
  17. package/package.json +4 -4
  18. package/src/commands/service/index.ts +8 -53
  19. package/src/commands/service/purge-permissions/purge-permissions-command.ts +52 -0
  20. package/src/commands/service/purge-permissions/purge-permissions-options.ts +9 -0
  21. package/src/commands/service/purge-permissions/purge-permissions.ts +75 -0
  22. package/src/commands/service/sync-permissions/sync-permission-command.ts +58 -0
  23. package/dist/commands/service/sync-permissions-options.js.map +0 -1
  24. package/dist/commands/service/sync-permissions.js.map +0 -1
  25. /package/dist/commands/service/{sync-permissions-options.d.ts → sync-permissions/sync-permissions-options.d.ts} +0 -0
  26. /package/dist/commands/service/{sync-permissions-options.js → sync-permissions/sync-permissions-options.js} +0 -0
  27. /package/dist/commands/service/{sync-permissions.d.ts → sync-permissions/sync-permissions.d.ts} +0 -0
  28. /package/dist/commands/service/{sync-permissions.js → sync-permissions/sync-permissions.js} +0 -0
  29. /package/src/commands/service/{sync-permissions-options.ts → sync-permissions/sync-permissions-options.ts} +0 -0
  30. /package/src/commands/service/{sync-permissions.ts → sync-permissions/sync-permissions.ts} +0 -0
@@ -1,60 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.service = void 0;
4
- const tslib_1 = require("tslib");
5
- const chalk_1 = require("chalk");
6
- const sync_permissions_1 = require("./sync-permissions");
4
+ const purge_permissions_command_1 = require("./purge-permissions/purge-permissions-command");
5
+ const sync_permission_command_1 = require("./sync-permissions/sync-permission-command");
7
6
  exports.service = {
8
7
  command: 'service',
9
8
  describe: 'General commands related to Mosaic services.',
10
9
  builder: (yargs) => yargs
11
- .command('sync-permissions', 'Synchronize permissions for a given service with ID Service.', syncPermissions)
10
+ .command('sync-permissions', 'Synchronize permissions for a given service with ID Service.', sync_permission_command_1.syncPermissionsCommand)
11
+ .command('purge-permissions', 'Purge permissions for a given service from ID Service.', purge_permissions_command_1.purgePermissionsCommand)
12
12
  .demandCommand(),
13
13
  handler: (_args) => {
14
14
  console.log('Please pick a sub command related to Mosaic services.');
15
15
  },
16
16
  };
17
- const syncPermissions = {
18
- builder: (yargs) => {
19
- return yargs
20
- .option('serviceId', {
21
- describe: 'Service ID the permissions should be synchronized to. If no value is explicity given, environment variable SERVICE_ID will be used.',
22
- alias: 'i',
23
- string: true,
24
- })
25
- .option('idServiceAuthBaseURL', {
26
- describe: 'ID Service Authentication Endpoint Base URL. If no value is explicity given, environment variable ID_SERVICE_AUTH_BASE_URL will be used.',
27
- alias: 'a',
28
- string: true,
29
- })
30
- .option('permissionDefinitionJsonPath', {
31
- describe: 'Path to permission-definition.json file. The default location is src/generated/security/permission-definition.json',
32
- alias: 'p',
33
- string: true,
34
- })
35
- .option('clientId', {
36
- describe: 'Client ID of a Service Account which has Synchronize Permission permission assigned. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_ID will be used.',
37
- alias: 'c',
38
- string: true,
39
- })
40
- .option('clientSecret', {
41
- describe: 'Client Secret for the above Client ID. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_SECRET will be used.',
42
- alias: 's',
43
- string: true,
44
- });
45
- },
46
- handler: (args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
47
- const [validatedArgs, errorMessages] = (0, sync_permissions_1.validateArgs)(args);
48
- if (errorMessages.length > 0) {
49
- console.log((0, chalk_1.red)('Some required arguments are missing.'));
50
- errorMessages.map((message) => {
51
- console.log((0, chalk_1.yellow)(`${message}`));
52
- });
53
- console.log();
54
- }
55
- else {
56
- yield (0, sync_permissions_1.synchronizePermissions)(validatedArgs);
57
- }
58
- }),
59
- };
60
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/service/index.ts"],"names":[],"mappings":";;;;AAAA,iCAAoC;AAEpC,yDAA0E;AAG7D,QAAA,OAAO,GAAoC;IACtD,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,8CAA8C;IACxD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,OAAO,CACN,kBAAkB,EAClB,8DAA8D,EAC9D,eAAe,CAChB;SACA,aAAa,EAAE;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;CACF,CAAC;AAEF,MAAM,eAAe,GAAsD;IACzE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,KAAK;aACT,MAAM,CAAC,WAAW,EAAE;YACnB,QAAQ,EACN,qIAAqI;YACvI,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,sBAAsB,EAAE;YAC9B,QAAQ,EACN,0IAA0I;YAC5I,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,8BAA8B,EAAE;YACtC,QAAQ,EACN,oHAAoH;YACtH,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,UAAU,EAAE;YAClB,QAAQ,EACN,mLAAmL;YACrL,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,cAAc,EAAE;YACtB,QAAQ,EACN,yIAAyI;YAC3I,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,CAAO,IAAI,EAAE,EAAE;QACtB,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,IAAA,+BAAY,EAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,IAAA,WAAG,EAAC,sCAAsC,CAAC,CAAC,CAAC;YACzD,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,EAAE,CAAC;SACf;aAAM;YACL,MAAM,IAAA,yCAAsB,EAAC,aAAa,CAAC,CAAC;SAC7C;IACH,CAAC,CAAA;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/service/index.ts"],"names":[],"mappings":";;;AACA,6FAAwF;AACxF,wFAAoF;AAEvE,QAAA,OAAO,GAAoC;IACtD,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,8CAA8C;IACxD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,OAAO,CACN,kBAAkB,EAClB,8DAA8D,EAC9D,gDAAsB,CACvB;SACA,OAAO,CACN,mBAAmB,EACnB,wDAAwD,EACxD,mDAAuB,CACxB;SACA,aAAa,EAAE;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { CommandModule } from 'yargs';
2
+ import { GetPurgePermissionsOptions } from './purge-permissions-options';
3
+ export declare const purgePermissionsCommand: CommandModule<unknown, GetPurgePermissionsOptions>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.purgePermissionsCommand = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = require("chalk");
6
+ const purge_permissions_1 = require("./purge-permissions");
7
+ exports.purgePermissionsCommand = {
8
+ builder: (yargs) => {
9
+ return yargs
10
+ .option('serviceId', {
11
+ describe: 'Service ID the permissions should be purged from. If no value is explicity given, environment variable SERVICE_ID will be used.',
12
+ alias: 'i',
13
+ string: true,
14
+ })
15
+ .option('idServiceAuthBaseURL', {
16
+ describe: 'ID Service Authentication Endpoint Base URL. If no value is explicity given, environment variable ID_SERVICE_AUTH_BASE_URL will be used.',
17
+ alias: 'a',
18
+ string: true,
19
+ })
20
+ .option('clientId', {
21
+ describe: 'Client ID of a Service Account which has Synchronize Permission permission assigned. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_ID will be used.',
22
+ alias: 'c',
23
+ string: true,
24
+ })
25
+ .option('clientSecret', {
26
+ describe: 'Client Secret for the above Client ID. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_SECRET will be used.',
27
+ alias: 's',
28
+ string: true,
29
+ });
30
+ },
31
+ handler: (args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
32
+ const [validatedArgs, errorMessages] = (0, purge_permissions_1.validateArgs)(args);
33
+ if (errorMessages.length > 0) {
34
+ console.log((0, chalk_1.red)('Some required arguments are missing and/or are erroneous.'));
35
+ errorMessages.map((message) => {
36
+ console.log((0, chalk_1.yellow)(`${message}`));
37
+ });
38
+ console.log();
39
+ }
40
+ else {
41
+ yield (0, purge_permissions_1.purgePermissions)(validatedArgs);
42
+ }
43
+ }),
44
+ };
45
+ //# sourceMappingURL=purge-permissions-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-permissions-command.js","sourceRoot":"","sources":["../../../../src/commands/service/purge-permissions/purge-permissions-command.ts"],"names":[],"mappings":";;;;AAAA,iCAAoC;AAEpC,2DAAqE;AAGxD,QAAA,uBAAuB,GAGhC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,KAAK;aACT,MAAM,CAAC,WAAW,EAAE;YACnB,QAAQ,EACN,iIAAiI;YACnI,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,sBAAsB,EAAE;YAC9B,QAAQ,EACN,0IAA0I;YAC5I,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,UAAU,EAAE;YAClB,QAAQ,EACN,mLAAmL;YACrL,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,cAAc,EAAE;YACtB,QAAQ,EACN,yIAAyI;YAC3I,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,CAAO,IAAI,EAAE,EAAE;QACtB,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,IAAA,gCAAY,EAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CACT,IAAA,WAAG,EAAC,2DAA2D,CAAC,CACjE,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,EAAE,CAAC;SACf;aAAM;YACL,MAAM,IAAA,oCAAgB,EAAC,aAAa,CAAC,CAAC;SACvC;IACH,CAAC,CAAA;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Options to Purge Permissions
3
+ */
4
+ export interface GetPurgePermissionsOptions {
5
+ serviceId?: string;
6
+ idServiceAuthBaseURL?: string;
7
+ clientId?: string;
8
+ clientSecret?: string;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=purge-permissions-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-permissions-options.js","sourceRoot":"","sources":["../../../../src/commands/service/purge-permissions/purge-permissions-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { GetPurgePermissionsOptions } from './purge-permissions-options';
2
+ export declare const validateArgs: (args: GetPurgePermissionsOptions) => [Required<GetPurgePermissionsOptions>, string[]];
3
+ export declare const purgePermissions: (args: Required<GetPurgePermissionsOptions>) => Promise<void>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.purgePermissions = exports.validateArgs = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const mosaic_id_link_be_1 = require("@axinom/mosaic-id-link-be");
6
+ const mosaic_service_common_1 = require("@axinom/mosaic-service-common");
7
+ const chalk_1 = require("chalk");
8
+ const validateArgs = (args) => {
9
+ var _a, _b, _c, _d, _e, _f, _g, _h;
10
+ const errorMessages = [];
11
+ const serviceId = (_b = (_a = args.serviceId) !== null && _a !== void 0 ? _a : process.env.SERVICE_ID) !== null && _b !== void 0 ? _b : '';
12
+ const idServiceAuthBaseURL = (_d = (_c = args.idServiceAuthBaseURL) !== null && _c !== void 0 ? _c : process.env.ID_SERVICE_AUTH_BASE_URL) !== null && _d !== void 0 ? _d : '';
13
+ const clientId = (_f = (_e = args.clientId) !== null && _e !== void 0 ? _e : process.env.SERVICE_ACCOUNT_CLIENT_ID) !== null && _f !== void 0 ? _f : '';
14
+ const clientSecret = (_h = (_g = args.clientSecret) !== null && _g !== void 0 ? _g : process.env.SERVICE_ACCOUNT_CLIENT_SECRET) !== null && _h !== void 0 ? _h : '';
15
+ if ((0, mosaic_service_common_1.isNullOrWhitespace)(serviceId)) {
16
+ errorMessages.push('[serviceId] is required.');
17
+ }
18
+ else if (serviceId.startsWith('ax-')) {
19
+ errorMessages.push(`[serviceId] cannot start with ax-`);
20
+ }
21
+ if ((0, mosaic_service_common_1.isNullOrWhitespace)(idServiceAuthBaseURL)) {
22
+ errorMessages.push('[idServiceBaseURL] is required.');
23
+ }
24
+ if ((0, mosaic_service_common_1.isNullOrWhitespace)(clientId)) {
25
+ errorMessages.push('[clientId] is required.');
26
+ }
27
+ if ((0, mosaic_service_common_1.isNullOrWhitespace)(clientSecret)) {
28
+ errorMessages.push('[clientSecret] is required.');
29
+ }
30
+ return [
31
+ {
32
+ serviceId,
33
+ idServiceAuthBaseURL,
34
+ clientId,
35
+ clientSecret,
36
+ },
37
+ errorMessages,
38
+ ];
39
+ };
40
+ exports.validateArgs = validateArgs;
41
+ const purgePermissions = (args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
42
+ try {
43
+ const serviceAccountToken = yield (0, mosaic_id_link_be_1.getServiceAccountToken)(args.idServiceAuthBaseURL, args.clientId, args.clientSecret);
44
+ const purgePermissionResults = yield (0, mosaic_id_link_be_1.purgePermissions)(args.idServiceAuthBaseURL, serviceAccountToken.accessToken, args.serviceId);
45
+ console.log((0, chalk_1.green)(`Permissions purged successfully for Service [${args.serviceId}].`));
46
+ console.log((0, chalk_1.green)(JSON.stringify(purgePermissionResults, null, 2)));
47
+ }
48
+ catch (e) {
49
+ const error = (0, mosaic_service_common_1.ensureError)(e);
50
+ console.log((0, chalk_1.red)(`Error while purging permission for Service ID [${args.serviceId}].`));
51
+ console.log((0, chalk_1.red)(JSON.stringify(error.message)));
52
+ }
53
+ });
54
+ exports.purgePermissions = purgePermissions;
55
+ //# sourceMappingURL=purge-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-permissions.js","sourceRoot":"","sources":["../../../../src/commands/service/purge-permissions/purge-permissions.ts"],"names":[],"mappings":";;;;AAAA,iEAGmC;AACnC,yEAAgF;AAChF,iCAAmC;AAG5B,MAAM,YAAY,GAAG,CAC1B,IAAgC,EACkB,EAAE;;IACpD,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,MAAA,MAAA,IAAI,CAAC,SAAS,mCAAI,OAAO,CAAC,GAAG,CAAC,UAAU,mCAAI,EAAE,CAAC;IAEjE,MAAM,oBAAoB,GACxB,MAAA,MAAA,IAAI,CAAC,oBAAoB,mCAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,mCAAI,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,mCAAI,EAAE,CAAC;IAC9E,MAAM,YAAY,GAChB,MAAA,MAAA,IAAI,CAAC,YAAY,mCAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,mCAAI,EAAE,CAAC;IAEvE,IAAI,IAAA,0CAAkB,EAAC,SAAS,CAAC,EAAE;QACjC,aAAa,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;KAChD;SAAM,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACtC,aAAa,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;KACzD;IACD,IAAI,IAAA,0CAAkB,EAAC,oBAAoB,CAAC,EAAE;QAC5C,aAAa,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;KACvD;IACD,IAAI,IAAA,0CAAkB,EAAC,QAAQ,CAAC,EAAE;QAChC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;KAC/C;IACD,IAAI,IAAA,0CAAkB,EAAC,YAAY,CAAC,EAAE;QACpC,aAAa,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;KACnD;IAED,OAAO;QACL;YACE,SAAS;YACT,oBAAoB;YACpB,QAAQ;YACR,YAAY;SACb;QACD,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AArCW,QAAA,YAAY,gBAqCvB;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAA0C,EAC3B,EAAE;IACjB,IAAI;QACF,MAAM,mBAAmB,GAAG,MAAM,IAAA,0CAAsB,EACtD,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,YAAY,CAClB,CAAC;QAEF,MAAM,sBAAsB,GAAG,MAAM,IAAA,oCAAkB,EACrD,IAAI,CAAC,oBAAoB,EACzB,mBAAmB,CAAC,WAAW,EAC/B,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,IAAA,aAAK,EAAC,gDAAgD,IAAI,CAAC,SAAS,IAAI,CAAC,CAC1E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAA,aAAK,EAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACrE;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,KAAK,GAAG,IAAA,mCAAW,EAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,IAAA,WAAG,EAAC,kDAAkD,IAAI,CAAC,SAAS,IAAI,CAAC,CAC1E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAA,WAAG,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACjD;AACH,CAAC,CAAA,CAAC;AA3BW,QAAA,gBAAgB,oBA2B3B"}
@@ -0,0 +1,3 @@
1
+ import { CommandModule } from 'yargs';
2
+ import { GetSyncPermissionsOptions } from './sync-permissions-options';
3
+ export declare const syncPermissionsCommand: CommandModule<unknown, GetSyncPermissionsOptions>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncPermissionsCommand = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = require("chalk");
6
+ const sync_permissions_1 = require("./sync-permissions");
7
+ exports.syncPermissionsCommand = {
8
+ builder: (yargs) => {
9
+ return yargs
10
+ .option('serviceId', {
11
+ describe: 'Service ID the permissions should be synchronized to. If no value is explicity given, environment variable SERVICE_ID will be used.',
12
+ alias: 'i',
13
+ string: true,
14
+ })
15
+ .option('idServiceAuthBaseURL', {
16
+ describe: 'ID Service Authentication Endpoint Base URL. If no value is explicity given, environment variable ID_SERVICE_AUTH_BASE_URL will be used.',
17
+ alias: 'a',
18
+ string: true,
19
+ })
20
+ .option('permissionDefinitionJsonPath', {
21
+ describe: 'Path to permission-definition.json file. The default location is src/generated/security/permission-definition.json',
22
+ alias: 'p',
23
+ string: true,
24
+ })
25
+ .option('clientId', {
26
+ describe: 'Client ID of a Service Account which has Synchronize Permission permission assigned. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_ID will be used.',
27
+ alias: 'c',
28
+ string: true,
29
+ })
30
+ .option('clientSecret', {
31
+ describe: 'Client Secret for the above Client ID. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_SECRET will be used.',
32
+ alias: 's',
33
+ string: true,
34
+ });
35
+ },
36
+ handler: (args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
37
+ const [validatedArgs, errorMessages] = (0, sync_permissions_1.validateArgs)(args);
38
+ if (errorMessages.length > 0) {
39
+ console.log((0, chalk_1.red)('Some required arguments are missing and/or are erroneous.'));
40
+ errorMessages.map((message) => {
41
+ console.log((0, chalk_1.yellow)(`${message}`));
42
+ });
43
+ console.log();
44
+ }
45
+ else {
46
+ yield (0, sync_permissions_1.synchronizePermissions)(validatedArgs);
47
+ }
48
+ }),
49
+ };
50
+ //# sourceMappingURL=sync-permission-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-permission-command.js","sourceRoot":"","sources":["../../../../src/commands/service/sync-permissions/sync-permission-command.ts"],"names":[],"mappings":";;;;AAAA,iCAAoC;AAEpC,yDAA0E;AAG7D,QAAA,sBAAsB,GAG/B;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,KAAK;aACT,MAAM,CAAC,WAAW,EAAE;YACnB,QAAQ,EACN,qIAAqI;YACvI,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,sBAAsB,EAAE;YAC9B,QAAQ,EACN,0IAA0I;YAC5I,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,8BAA8B,EAAE;YACtC,QAAQ,EACN,oHAAoH;YACtH,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,UAAU,EAAE;YAClB,QAAQ,EACN,mLAAmL;YACrL,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,cAAc,EAAE;YACtB,QAAQ,EACN,yIAAyI;YAC3I,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,CAAO,IAAI,EAAE,EAAE;QACtB,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,IAAA,+BAAY,EAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CACT,IAAA,WAAG,EAAC,2DAA2D,CAAC,CACjE,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,EAAE,CAAC;SACf;aAAM;YACL,MAAM,IAAA,yCAAsB,EAAC,aAAa,CAAC,CAAC;SAC7C;IACH,CAAC,CAAA;CACF,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-permissions-options.js","sourceRoot":"","sources":["../../../../src/commands/service/sync-permissions/sync-permissions-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-permissions.js","sourceRoot":"","sources":["../../../../src/commands/service/sync-permissions/sync-permissions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axinom/mosaic-cli",
3
- "version": "0.31.0-rc.7",
3
+ "version": "0.31.0-rc.8",
4
4
  "description": "The Axinom Mosaic CLI",
5
5
  "author": "Axinom",
6
6
  "license": "PROPRIETARY",
@@ -34,8 +34,8 @@
34
34
  "@asyncapi/diff": "^0.4.1",
35
35
  "@asyncapi/modelina": "^1.8.4",
36
36
  "@asyncapi/parser": "^2.0.2",
37
- "@axinom/mosaic-id-link-be": "^0.19.0-rc.7",
38
- "@axinom/mosaic-service-common": "^0.47.0-rc.7",
37
+ "@axinom/mosaic-id-link-be": "^0.19.0-rc.8",
38
+ "@axinom/mosaic-service-common": "^0.47.0-rc.8",
39
39
  "@graphql-inspector/core": "^3.1.2",
40
40
  "@stoplight/spectral-core": "^1.18.3",
41
41
  "@stoplight/spectral-parsers": "^1.0.3",
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "gitHead": "ed089f2391fef0170a5a30341e33da33a3861ebf"
75
+ "gitHead": "4f20dff1faef3634d5352fbc4dabb0556b9fe1d0"
76
76
  }
@@ -1,7 +1,6 @@
1
- import { red, yellow } from 'chalk';
2
1
  import { CommandModule } from 'yargs';
3
- import { synchronizePermissions, validateArgs } from './sync-permissions';
4
- import { GetSyncPermissionsOptions } from './sync-permissions-options';
2
+ import { purgePermissionsCommand } from './purge-permissions/purge-permissions-command';
3
+ import { syncPermissionsCommand } from './sync-permissions/sync-permission-command';
5
4
 
6
5
  export const service: CommandModule<unknown, unknown> = {
7
6
  command: 'service',
@@ -11,59 +10,15 @@ export const service: CommandModule<unknown, unknown> = {
11
10
  .command(
12
11
  'sync-permissions',
13
12
  'Synchronize permissions for a given service with ID Service.',
14
- syncPermissions,
13
+ syncPermissionsCommand,
14
+ )
15
+ .command(
16
+ 'purge-permissions',
17
+ 'Purge permissions for a given service from ID Service.',
18
+ purgePermissionsCommand,
15
19
  )
16
20
  .demandCommand(),
17
21
  handler: (_args) => {
18
22
  console.log('Please pick a sub command related to Mosaic services.');
19
23
  },
20
24
  };
21
-
22
- const syncPermissions: CommandModule<unknown, GetSyncPermissionsOptions> = {
23
- builder: (yargs) => {
24
- return yargs
25
- .option('serviceId', {
26
- describe:
27
- 'Service ID the permissions should be synchronized to. If no value is explicity given, environment variable SERVICE_ID will be used.',
28
- alias: 'i',
29
- string: true,
30
- })
31
- .option('idServiceAuthBaseURL', {
32
- describe:
33
- 'ID Service Authentication Endpoint Base URL. If no value is explicity given, environment variable ID_SERVICE_AUTH_BASE_URL will be used.',
34
- alias: 'a',
35
- string: true,
36
- })
37
- .option('permissionDefinitionJsonPath', {
38
- describe:
39
- 'Path to permission-definition.json file. The default location is src/generated/security/permission-definition.json',
40
- alias: 'p',
41
- string: true,
42
- })
43
- .option('clientId', {
44
- describe:
45
- 'Client ID of a Service Account which has Synchronize Permission permission assigned. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_ID will be used.',
46
- alias: 'c',
47
- string: true,
48
- })
49
- .option('clientSecret', {
50
- describe:
51
- 'Client Secret for the above Client ID. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_SECRET will be used.',
52
- alias: 's',
53
- string: true,
54
- });
55
- },
56
- handler: async (args) => {
57
- const [validatedArgs, errorMessages] = validateArgs(args);
58
- if (errorMessages.length > 0) {
59
- console.log(red('Some required arguments are missing.'));
60
- errorMessages.map((message) => {
61
- console.log(yellow(`${message}`));
62
- });
63
-
64
- console.log();
65
- } else {
66
- await synchronizePermissions(validatedArgs);
67
- }
68
- },
69
- };
@@ -0,0 +1,52 @@
1
+ import { red, yellow } from 'chalk';
2
+ import { CommandModule } from 'yargs';
3
+ import { purgePermissions, validateArgs } from './purge-permissions';
4
+ import { GetPurgePermissionsOptions } from './purge-permissions-options';
5
+
6
+ export const purgePermissionsCommand: CommandModule<
7
+ unknown,
8
+ GetPurgePermissionsOptions
9
+ > = {
10
+ builder: (yargs) => {
11
+ return yargs
12
+ .option('serviceId', {
13
+ describe:
14
+ 'Service ID the permissions should be purged from. If no value is explicity given, environment variable SERVICE_ID will be used.',
15
+ alias: 'i',
16
+ string: true,
17
+ })
18
+ .option('idServiceAuthBaseURL', {
19
+ describe:
20
+ 'ID Service Authentication Endpoint Base URL. If no value is explicity given, environment variable ID_SERVICE_AUTH_BASE_URL will be used.',
21
+ alias: 'a',
22
+ string: true,
23
+ })
24
+ .option('clientId', {
25
+ describe:
26
+ 'Client ID of a Service Account which has Synchronize Permission permission assigned. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_ID will be used.',
27
+ alias: 'c',
28
+ string: true,
29
+ })
30
+ .option('clientSecret', {
31
+ describe:
32
+ 'Client Secret for the above Client ID. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_SECRET will be used.',
33
+ alias: 's',
34
+ string: true,
35
+ });
36
+ },
37
+ handler: async (args) => {
38
+ const [validatedArgs, errorMessages] = validateArgs(args);
39
+ if (errorMessages.length > 0) {
40
+ console.log(
41
+ red('Some required arguments are missing and/or are erroneous.'),
42
+ );
43
+ errorMessages.map((message) => {
44
+ console.log(yellow(`${message}`));
45
+ });
46
+
47
+ console.log();
48
+ } else {
49
+ await purgePermissions(validatedArgs);
50
+ }
51
+ },
52
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Options to Purge Permissions
3
+ */
4
+ export interface GetPurgePermissionsOptions {
5
+ serviceId?: string;
6
+ idServiceAuthBaseURL?: string;
7
+ clientId?: string;
8
+ clientSecret?: string;
9
+ }
@@ -0,0 +1,75 @@
1
+ import {
2
+ getServiceAccountToken,
3
+ purgePermissions as purgePermissionsBe,
4
+ } from '@axinom/mosaic-id-link-be';
5
+ import { ensureError, isNullOrWhitespace } from '@axinom/mosaic-service-common';
6
+ import { green, red } from 'chalk';
7
+ import { GetPurgePermissionsOptions } from './purge-permissions-options';
8
+
9
+ export const validateArgs = (
10
+ args: GetPurgePermissionsOptions,
11
+ ): [Required<GetPurgePermissionsOptions>, string[]] => {
12
+ const errorMessages: string[] = [];
13
+
14
+ const serviceId = args.serviceId ?? process.env.SERVICE_ID ?? '';
15
+
16
+ const idServiceAuthBaseURL =
17
+ args.idServiceAuthBaseURL ?? process.env.ID_SERVICE_AUTH_BASE_URL ?? '';
18
+ const clientId = args.clientId ?? process.env.SERVICE_ACCOUNT_CLIENT_ID ?? '';
19
+ const clientSecret =
20
+ args.clientSecret ?? process.env.SERVICE_ACCOUNT_CLIENT_SECRET ?? '';
21
+
22
+ if (isNullOrWhitespace(serviceId)) {
23
+ errorMessages.push('[serviceId] is required.');
24
+ } else if (serviceId.startsWith('ax-')) {
25
+ errorMessages.push(`[serviceId] cannot start with ax-`);
26
+ }
27
+ if (isNullOrWhitespace(idServiceAuthBaseURL)) {
28
+ errorMessages.push('[idServiceBaseURL] is required.');
29
+ }
30
+ if (isNullOrWhitespace(clientId)) {
31
+ errorMessages.push('[clientId] is required.');
32
+ }
33
+ if (isNullOrWhitespace(clientSecret)) {
34
+ errorMessages.push('[clientSecret] is required.');
35
+ }
36
+
37
+ return [
38
+ {
39
+ serviceId,
40
+ idServiceAuthBaseURL,
41
+ clientId,
42
+ clientSecret,
43
+ },
44
+ errorMessages,
45
+ ];
46
+ };
47
+
48
+ export const purgePermissions = async (
49
+ args: Required<GetPurgePermissionsOptions>,
50
+ ): Promise<void> => {
51
+ try {
52
+ const serviceAccountToken = await getServiceAccountToken(
53
+ args.idServiceAuthBaseURL,
54
+ args.clientId,
55
+ args.clientSecret,
56
+ );
57
+
58
+ const purgePermissionResults = await purgePermissionsBe(
59
+ args.idServiceAuthBaseURL,
60
+ serviceAccountToken.accessToken,
61
+ args.serviceId,
62
+ );
63
+
64
+ console.log(
65
+ green(`Permissions purged successfully for Service [${args.serviceId}].`),
66
+ );
67
+ console.log(green(JSON.stringify(purgePermissionResults, null, 2)));
68
+ } catch (e) {
69
+ const error = ensureError(e);
70
+ console.log(
71
+ red(`Error while purging permission for Service ID [${args.serviceId}].`),
72
+ );
73
+ console.log(red(JSON.stringify(error.message)));
74
+ }
75
+ };
@@ -0,0 +1,58 @@
1
+ import { red, yellow } from 'chalk';
2
+ import { CommandModule } from 'yargs';
3
+ import { synchronizePermissions, validateArgs } from './sync-permissions';
4
+ import { GetSyncPermissionsOptions } from './sync-permissions-options';
5
+
6
+ export const syncPermissionsCommand: CommandModule<
7
+ unknown,
8
+ GetSyncPermissionsOptions
9
+ > = {
10
+ builder: (yargs) => {
11
+ return yargs
12
+ .option('serviceId', {
13
+ describe:
14
+ 'Service ID the permissions should be synchronized to. If no value is explicity given, environment variable SERVICE_ID will be used.',
15
+ alias: 'i',
16
+ string: true,
17
+ })
18
+ .option('idServiceAuthBaseURL', {
19
+ describe:
20
+ 'ID Service Authentication Endpoint Base URL. If no value is explicity given, environment variable ID_SERVICE_AUTH_BASE_URL will be used.',
21
+ alias: 'a',
22
+ string: true,
23
+ })
24
+ .option('permissionDefinitionJsonPath', {
25
+ describe:
26
+ 'Path to permission-definition.json file. The default location is src/generated/security/permission-definition.json',
27
+ alias: 'p',
28
+ string: true,
29
+ })
30
+ .option('clientId', {
31
+ describe:
32
+ 'Client ID of a Service Account which has Synchronize Permission permission assigned. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_ID will be used.',
33
+ alias: 'c',
34
+ string: true,
35
+ })
36
+ .option('clientSecret', {
37
+ describe:
38
+ 'Client Secret for the above Client ID. If no value is explicity given, environment variable SERVICE_ACCOUNT_CLIENT_SECRET will be used.',
39
+ alias: 's',
40
+ string: true,
41
+ });
42
+ },
43
+ handler: async (args) => {
44
+ const [validatedArgs, errorMessages] = validateArgs(args);
45
+ if (errorMessages.length > 0) {
46
+ console.log(
47
+ red('Some required arguments are missing and/or are erroneous.'),
48
+ );
49
+ errorMessages.map((message) => {
50
+ console.log(yellow(`${message}`));
51
+ });
52
+
53
+ console.log();
54
+ } else {
55
+ await synchronizePermissions(validatedArgs);
56
+ }
57
+ },
58
+ };
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-permissions-options.js","sourceRoot":"","sources":["../../../src/commands/service/sync-permissions-options.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-permissions.js","sourceRoot":"","sources":["../../../src/commands/service/sync-permissions.ts"],"names":[],"mappings":"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"}