@j-schreiber/sf-cli-security-audit 0.4.1 → 0.6.0

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 (69) hide show
  1. package/README.md +20 -5
  2. package/lib/commands/org/audit/init.d.ts +2 -0
  3. package/lib/commands/org/audit/init.js +10 -0
  4. package/lib/commands/org/audit/init.js.map +1 -1
  5. package/lib/commands/org/scan/user-perms.d.ts +20 -0
  6. package/lib/commands/org/scan/user-perms.js +88 -0
  7. package/lib/commands/org/scan/user-perms.js.map +1 -0
  8. package/lib/libs/conf-init/auditConfig.d.ts +8 -0
  9. package/lib/libs/conf-init/auditConfig.js +3 -2
  10. package/lib/libs/conf-init/auditConfig.js.map +1 -1
  11. package/lib/libs/conf-init/permissionsClassification.d.ts +3 -2
  12. package/lib/libs/conf-init/permissionsClassification.js +37 -27
  13. package/lib/libs/conf-init/permissionsClassification.js.map +1 -1
  14. package/lib/libs/conf-init/presets/loose.d.ts +6 -0
  15. package/lib/libs/conf-init/presets/loose.js +35 -0
  16. package/lib/libs/conf-init/presets/loose.js.map +1 -0
  17. package/lib/libs/conf-init/presets/none.d.ts +30 -0
  18. package/lib/libs/conf-init/presets/none.js +54 -0
  19. package/lib/libs/conf-init/presets/none.js.map +1 -0
  20. package/lib/libs/conf-init/presets/strict.d.ts +4 -0
  21. package/lib/libs/conf-init/presets/strict.js +28 -0
  22. package/lib/libs/conf-init/presets/strict.js.map +1 -0
  23. package/lib/libs/conf-init/presets.d.ts +7 -0
  24. package/lib/libs/conf-init/presets.js +20 -0
  25. package/lib/libs/conf-init/presets.js.map +1 -0
  26. package/lib/libs/core/classification-types.d.ts +1 -1
  27. package/lib/libs/core/classification-types.js +1 -1
  28. package/lib/libs/core/classification-types.js.map +1 -1
  29. package/lib/libs/core/constants.d.ts +1 -0
  30. package/lib/libs/core/constants.js +4 -0
  31. package/lib/libs/core/constants.js.map +1 -1
  32. package/lib/libs/core/file-mgmt/auditConfigFileManager.d.ts +1 -0
  33. package/lib/libs/core/file-mgmt/auditConfigFileManager.js +49 -4
  34. package/lib/libs/core/file-mgmt/auditConfigFileManager.js.map +1 -1
  35. package/lib/libs/core/mdapi/mdapiRetriever.d.ts +12 -68
  36. package/lib/libs/core/mdapi/mdapiRetriever.js +20 -90
  37. package/lib/libs/core/mdapi/mdapiRetriever.js.map +1 -1
  38. package/lib/libs/core/mdapi/metadataRegistryEntry.d.ts +40 -0
  39. package/lib/libs/core/mdapi/metadataRegistryEntry.js +46 -0
  40. package/lib/libs/core/mdapi/metadataRegistryEntry.js.map +1 -0
  41. package/lib/libs/core/mdapi/namedMetadataToolingQueryable.d.ts +33 -0
  42. package/lib/libs/core/mdapi/namedMetadataToolingQueryable.js +41 -0
  43. package/lib/libs/core/mdapi/namedMetadataToolingQueryable.js.map +1 -0
  44. package/lib/libs/core/mdapi/namedMetadataType.d.ts +20 -0
  45. package/lib/libs/core/mdapi/namedMetadataType.js +41 -0
  46. package/lib/libs/core/mdapi/namedMetadataType.js.map +1 -0
  47. package/lib/libs/core/mdapi/singletonMetadataType.d.ts +21 -0
  48. package/lib/libs/core/mdapi/singletonMetadataType.js +37 -0
  49. package/lib/libs/core/mdapi/singletonMetadataType.js.map +1 -0
  50. package/lib/libs/core/utils.d.ts +2 -0
  51. package/lib/libs/core/utils.js +6 -0
  52. package/lib/libs/core/utils.js.map +1 -1
  53. package/lib/libs/policies/profilePolicy.js +21 -28
  54. package/lib/libs/policies/profilePolicy.js.map +1 -1
  55. package/lib/libs/quick-scan/types.d.ts +17 -0
  56. package/lib/libs/quick-scan/types.js +2 -0
  57. package/lib/libs/quick-scan/types.js.map +1 -0
  58. package/lib/libs/quick-scan/userPermissionScanner.d.ts +22 -0
  59. package/lib/libs/quick-scan/userPermissionScanner.js +75 -0
  60. package/lib/libs/quick-scan/userPermissionScanner.js.map +1 -0
  61. package/messages/org.audit.init.md +12 -0
  62. package/messages/org.audit.run.md +12 -0
  63. package/messages/org.scan.user-perms.md +31 -0
  64. package/messages/policyclassifications.md +38 -2
  65. package/oclif.manifest.json +96 -2
  66. package/package.json +1 -1
  67. package/lib/libs/conf-init/defaultPolicyClassification.d.ts +0 -2
  68. package/lib/libs/conf-init/defaultPolicyClassification.js +0 -63
  69. package/lib/libs/conf-init/defaultPolicyClassification.js.map +0 -1
package/README.md CHANGED
@@ -38,12 +38,15 @@ Initialises classifications and policies for a security audit.
38
38
 
39
39
  ```
40
40
  USAGE
41
- $ sf org audit init -o <value> [--json] [--flags-dir <value>] [-d <value>] [--api-version <value>]
41
+ $ sf org audit init -o <value> [--json] [--flags-dir <value>] [-d <value>] [-p strict|loose|none] [--api-version
42
+ <value>]
42
43
 
43
44
  FLAGS
44
45
  -d, --output-dir=<value> Directory where the audit config is initialised. If not set, the root directory will be
45
46
  used.
46
47
  -o, --target-org=<value> (required) Target org to export permissions, profiles, users, etc.
48
+ -p, --preset=<option> [default: strict] Select a preset to initialise permission classifications (risk levels).
49
+ <options: strict|loose|none>
47
50
  --api-version=<value> Override the api version used for api requests made by this command
48
51
 
49
52
  GLOBAL FLAGS
@@ -60,9 +63,21 @@ EXAMPLES
60
63
  Initialise audit policies at the root directory
61
64
 
62
65
  $ sf org audit init -o MyTargetOrg
66
+
67
+ Initialise audit config at custom directory with preset
68
+
69
+ $ sf org audit init -o MyTargetOrg -d my_dir -p loose
70
+
71
+ FLAG DESCRIPTIONS
72
+ -p, --preset=strict|loose|none Select a preset to initialise permission classifications (risk levels).
73
+
74
+ The selected preset is applied before any other default mechanisms (such as template configs). This means, values
75
+ from a selected template override the preset. Consult the documentation to learn more about the rationale behind the
76
+ default risk levels. The risk levels interact with the configured preset on profiles and permission sets and
77
+ essentially control, if a permission is allowed in a certain profile / permission set.
63
78
  ```
64
79
 
65
- _See code: [src/commands/org/audit/init.ts](https://github.com/j-schreiber/js-sf-cli-security-audit/blob/v0.1.0/src/commands/org/audit/init.ts)_
80
+ _See code: [src/commands/org/audit/init.ts](https://github.com/j-schreiber/js-sf-cli-security-audit/blob/v0.4.1/src/commands/org/audit/init.ts)_
66
81
 
67
82
  ## `sf org audit run`
68
83
 
@@ -70,10 +85,10 @@ Audit your org.
70
85
 
71
86
  ```
72
87
  USAGE
73
- $ sf org audit run -o <value> -d <value> [--json] [--flags-dir <value>] [--api-version <value>]
88
+ $ sf org audit run -o <value> [--json] [--flags-dir <value>] [-d <value>] [--api-version <value>]
74
89
 
75
90
  FLAGS
76
- -d, --source-dir=<value> (required) Location of the audit config.
91
+ -d, --source-dir=<value> Location of the audit config.
77
92
  -o, --target-org=<value> (required) The org that is audited.
78
93
  --api-version=<value> Override the api version used for api requests made by this command
79
94
 
@@ -93,7 +108,7 @@ EXAMPLES
93
108
  $ sf org audit run -o MyTargetOrg -d configs/prod
94
109
  ```
95
110
 
96
- _See code: [src/commands/org/audit/run.ts](https://github.com/j-schreiber/js-sf-cli-security-audit/blob/v0.1.0/src/commands/org/audit/run.ts)_
111
+ _See code: [src/commands/org/audit/run.ts](https://github.com/j-schreiber/js-sf-cli-security-audit/blob/v0.4.1/src/commands/org/audit/run.ts)_
97
112
 
98
113
  <!-- commandsstop -->
99
114
 
@@ -1,5 +1,6 @@
1
1
  import { SfCommand } from '@salesforce/sf-plugins-core';
2
2
  import { AuditRunConfig } from '../../../libs/core/file-mgmt/schema.js';
3
+ import { AuditInitPresets } from '../../../libs/conf-init/presets.js';
3
4
  export type OrgAuditInitResult = AuditRunConfig;
4
5
  export default class OrgAuditInit extends SfCommand<OrgAuditInitResult> {
5
6
  static readonly summary: string;
@@ -8,6 +9,7 @@ export default class OrgAuditInit extends SfCommand<OrgAuditInitResult> {
8
9
  static readonly flags: {
9
10
  'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
10
11
  'output-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ preset: import("@oclif/core/interfaces").OptionFlag<AuditInitPresets, import("@oclif/core/interfaces").CustomOptions>;
11
13
  'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
14
  };
13
15
  run(): Promise<OrgAuditInitResult>;
@@ -2,8 +2,16 @@ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
2
2
  import { Messages } from '@salesforce/core';
3
3
  import AuditConfig from '../../../libs/conf-init/auditConfig.js';
4
4
  import { isPermissionsConfig, isPolicyConfig, } from '../../../libs/core/file-mgmt/schema.js';
5
+ import { AuditInitPresets } from '../../../libs/conf-init/presets.js';
5
6
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
6
7
  const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'org.audit.init');
8
+ const presetFlag = Flags.custom({
9
+ char: 'p',
10
+ summary: messages.getMessage('flags.preset.summary'),
11
+ description: messages.getMessage('flags.preset.description'),
12
+ options: Object.values(AuditInitPresets),
13
+ default: AuditInitPresets.strict,
14
+ })();
7
15
  export default class OrgAuditInit extends SfCommand {
8
16
  static summary = messages.getMessage('summary');
9
17
  static description = messages.getMessage('description');
@@ -20,12 +28,14 @@ export default class OrgAuditInit extends SfCommand {
20
28
  summary: messages.getMessage('flags.output-dir.summary'),
21
29
  default: '',
22
30
  }),
31
+ preset: presetFlag,
23
32
  'api-version': Flags.orgApiVersion(),
24
33
  };
25
34
  async run() {
26
35
  const { flags } = await this.parse(OrgAuditInit);
27
36
  const auditConfig = await AuditConfig.init(flags['target-org'].getConnection(flags['api-version']), {
28
37
  targetDir: flags['output-dir'],
38
+ preset: flags.preset,
29
39
  });
30
40
  this.printResults(auditConfig);
31
41
  return auditConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/org/audit/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/org/audit/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAIL,mBAAmB,EACnB,cAAc,GACf,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,oCAAoC,EAAE,gBAAgB,CAAC,CAAC;AAI/F,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAmB;IAChD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC;IACpD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACxC,OAAO,EAAE,gBAAgB,CAAC,MAAM;CACjC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAA6B;IAC9D,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;YAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;YAC5B,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;KACrC,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;YAClG,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC/B,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,YAAY,CAAC,MAAsB;QACzC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,oBAAoB,CAAC,eAA8C;QACzE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,UAAU,CACb,QAAQ,CAAC,UAAU,CAAC,qCAAqC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAC9F,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,QAAgC;QACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;YAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACjB,IAAI,CAAC,UAAU,CACb,QAAQ,CAAC,UAAU,CAAC,wBAAwB,EAAE;wBAC5C,IAAI;wBACJ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC;wBAC1C,GAAG,CAAC,QAAQ;qBACb,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { QuickScanResult } from '../../../libs/quick-scan/types.js';
3
+ import { EntityScanStatus } from '../../../libs/quick-scan/userPermissionScanner.js';
4
+ export type OrgUserPermScanResult = QuickScanResult;
5
+ export default class OrgUserPermScan extends SfCommand<OrgUserPermScanResult> {
6
+ static readonly summary: string;
7
+ static readonly description: string;
8
+ static readonly examples: string[];
9
+ static readonly flags: {
10
+ name: import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
11
+ 'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<OrgUserPermScanResult>;
15
+ private reportProgress;
16
+ private print;
17
+ private printSummary;
18
+ private printPermissionResults;
19
+ }
20
+ export declare function isEntityStatus(cls: unknown): cls is EntityScanStatus;
@@ -0,0 +1,88 @@
1
+ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
2
+ import { Messages } from '@salesforce/core';
3
+ import UserPermissionScanner from '../../../libs/quick-scan/userPermissionScanner.js';
4
+ import { capitalize } from '../../../libs/core/utils.js';
5
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
6
+ const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'org.scan.user-perms');
7
+ export default class OrgUserPermScan extends SfCommand {
8
+ static summary = messages.getMessage('summary');
9
+ static description = messages.getMessage('description');
10
+ static examples = messages.getMessages('examples');
11
+ static flags = {
12
+ name: Flags.string({
13
+ summary: messages.getMessage('flags.name.summary'),
14
+ description: messages.getMessage('flags.name.description'),
15
+ char: 'n',
16
+ multiple: true,
17
+ required: true,
18
+ }),
19
+ 'target-org': Flags.requiredOrg({
20
+ summary: messages.getMessage('flags.target-org.summary'),
21
+ char: 'o',
22
+ required: true,
23
+ }),
24
+ 'api-version': Flags.orgApiVersion(),
25
+ };
26
+ async run() {
27
+ const { flags } = await this.parse(OrgUserPermScan);
28
+ const scanner = new UserPermissionScanner();
29
+ scanner.on('progress', this.reportProgress);
30
+ const result = await scanner.quickScan({
31
+ targetOrg: flags['target-org'].getConnection(flags['api-version']),
32
+ permissions: flags.name,
33
+ });
34
+ this.print(result);
35
+ return result;
36
+ }
37
+ reportProgress = (event) => {
38
+ if (event.status === 'Pending') {
39
+ this.spinner.start('Scanning');
40
+ }
41
+ const counters = [];
42
+ Object.entries(event).forEach(([propName, entityStatus]) => {
43
+ if (isEntityStatus(entityStatus)) {
44
+ counters.push(`${capitalize(propName)} (${entityStatus.resolved}/${entityStatus.total})`);
45
+ }
46
+ });
47
+ this.spinner.status = counters.join(' | ');
48
+ if (event.status === 'Completed') {
49
+ this.spinner.stop();
50
+ this.logSuccess(messages.getMessage('success.profiles-count', [event.profiles.total]));
51
+ this.logSuccess(messages.getMessage('success.permissionsets-count', [event.permissionSets.total]));
52
+ this.log();
53
+ }
54
+ };
55
+ print(result) {
56
+ this.printSummary(result);
57
+ Object.entries(result.permissions).forEach(([permName, permResult]) => {
58
+ this.printPermissionResults(permName, permResult);
59
+ });
60
+ }
61
+ printSummary(result) {
62
+ const data = [];
63
+ Object.entries(result.permissions).forEach(([permissionName, permResult]) => {
64
+ data.push({
65
+ permissionName,
66
+ profiles: permResult.profiles.length,
67
+ permissionSets: permResult.permissionSets.length,
68
+ });
69
+ });
70
+ this.table({ data, title: '=== Summary ===', titleOptions: { bold: true } });
71
+ }
72
+ printPermissionResults(permissionName, result) {
73
+ const data = [];
74
+ result.profiles.forEach((entityName) => {
75
+ data.push({ entityName, type: 'Profile' });
76
+ });
77
+ result.permissionSets.forEach((entityName) => {
78
+ data.push({ entityName, type: 'Permission Set' });
79
+ });
80
+ if (data.length > 0) {
81
+ this.table({ data, title: permissionName, titleOptions: { underline: true } });
82
+ }
83
+ }
84
+ }
85
+ export function isEntityStatus(cls) {
86
+ return cls.total !== undefined && cls.resolved !== undefined;
87
+ }
88
+ //# sourceMappingURL=user-perms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-perms.js","sourceRoot":"","sources":["../../../../src/commands/org/scan/user-perms.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,18 @@
1
1
  import { Connection } from '@salesforce/core';
2
2
  import { AuditRunConfig } from '../core/file-mgmt/schema.js';
3
+ import { AuditInitPresets } from './presets.js';
3
4
  /**
4
5
  * Additional options how the config should be initialised.
5
6
  */
6
7
  export type AuditInitOptions = {
8
+ /**
9
+ * When set, config files are created at the target location.
10
+ */
7
11
  targetDir?: string;
12
+ /**
13
+ * An optional preset to initialise classifications and policies.
14
+ */
15
+ preset?: AuditInitPresets;
8
16
  };
9
17
  /**
10
18
  * Exposes key functionality to load an audit config as static methods. This makes
@@ -14,7 +14,7 @@ export default class AuditConfig {
14
14
  */
15
15
  static async init(targetCon, opts) {
16
16
  const conf = { classifications: {}, policies: {} };
17
- conf.classifications.userPermissions = { content: await initUserPermissions(targetCon) };
17
+ conf.classifications.userPermissions = { content: await initUserPermissions(targetCon, opts?.preset) };
18
18
  const customPerms = await initCustomPermissions(targetCon);
19
19
  if (customPerms) {
20
20
  conf.classifications.customPermissions = { content: customPerms };
@@ -22,7 +22,8 @@ export default class AuditConfig {
22
22
  conf.policies.Profiles = { content: await initProfiles(targetCon) };
23
23
  conf.policies.PermissionSets = { content: await initPermissionSets(targetCon) };
24
24
  conf.policies.ConnectedApps = { content: initConnectedApps() };
25
- if (opts?.targetDir) {
25
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
26
+ if (opts?.targetDir || opts?.targetDir === '') {
26
27
  DefaultFileManager.save(opts.targetDir, conf);
27
28
  }
28
29
  return conf;
@@ -1 +1 @@
1
- {"version":3,"file":"auditConfig.js","sourceRoot":"","sources":["../../../src/libs/conf-init/auditConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASzF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAqB,EAAE,IAAuB;QACrE,MAAM,IAAI,GAAmB,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACnE,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QACzF,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC;QAC/D,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;YACpB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,IAAI,CAAC,SAAiB;QAClC,OAAO,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"auditConfig.js","sourceRoot":"","sources":["../../../src/libs/conf-init/auditConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiBzF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAqB,EAAE,IAAuB;QACrE,MAAM,IAAI,GAAmB,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACnE,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QACvG,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC;QAC/D,wEAAwE;QACxE,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,CAAC;YAC9C,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,IAAI,CAAC,SAAiB;QAClC,OAAO,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -1,12 +1,13 @@
1
1
  import { Connection } from '@salesforce/core';
2
2
  import { PermissionsConfig } from '../core/file-mgmt/schema.js';
3
+ import { AuditInitPresets } from './presets.js';
3
4
  /**
4
- * Initialises a fresh set of user permissions from target org connection
5
+ * Initialises a fresh set of user permissions from target org connection.
5
6
  *
6
7
  * @param con
7
8
  * @returns
8
9
  */
9
- export declare function initUserPermissions(con: Connection): Promise<PermissionsConfig>;
10
+ export declare function initUserPermissions(con: Connection, preset?: AuditInitPresets): Promise<PermissionsConfig>;
10
11
  /**
11
12
  * Initialises a fresh set of custom permissions from the target org
12
13
  *
@@ -1,17 +1,21 @@
1
- import { CUSTOM_PERMS_QUERY } from '../core/constants.js';
1
+ import { CUSTOM_PERMS_QUERY, PROFILES_QUERY } from '../core/constants.js';
2
+ import MDAPI from '../core/mdapi/mdapiRetriever.js';
2
3
  import { classificationSorter, PermissionRiskLevel } from '../core/classification-types.js';
3
- import { DEFAULT_CLASSIFICATIONS } from './defaultPolicyClassification.js';
4
+ import { loadPreset } from './presets.js';
4
5
  /**
5
- * Initialises a fresh set of user permissions from target org connection
6
+ * Initialises a fresh set of user permissions from target org connection.
6
7
  *
7
8
  * @param con
8
9
  * @returns
9
10
  */
10
- export async function initUserPermissions(con) {
11
- const permSet = await con.describe('PermissionSet');
12
- const result = { permissions: {} };
13
- const perms = parsePermissionsFromPermSet(permSet);
11
+ export async function initUserPermissions(con, preset) {
12
+ const describePerms = await parsePermsFromDescribe(con);
13
+ const assignedPerms = await findAssignedPerms(con);
14
+ const allPerms = { ...describePerms, ...assignedPerms };
15
+ const presConfig = loadPreset(preset);
16
+ const perms = presConfig.classifyUserPermissions(Object.values(allPerms));
14
17
  perms.sort(classificationSorter);
18
+ const result = { permissions: {} };
15
19
  perms.forEach((perm) => (result.permissions[perm.name] = {
16
20
  label: sanitiseLabel(perm.label),
17
21
  classification: perm.classification,
@@ -42,27 +46,33 @@ export async function initCustomPermissions(con) {
42
46
  }));
43
47
  return result;
44
48
  }
45
- function parsePermissionsFromPermSet(describe) {
46
- const permFields = describe.fields.filter((field) => field.name.startsWith('Permissions'));
47
- return permFields.map((field) => {
48
- const policyName = field.name.replace('Permissions', '');
49
- const defaultDef = DEFAULT_CLASSIFICATIONS[policyName];
50
- if (defaultDef) {
51
- return {
52
- label: field.label,
53
- name: policyName,
54
- classification: defaultDef.classification,
55
- reason: defaultDef.reason,
56
- };
57
- }
58
- else {
59
- return {
60
- label: field.label,
61
- name: policyName,
62
- classification: PermissionRiskLevel.UNKNOWN,
63
- };
64
- }
49
+ async function parsePermsFromDescribe(con) {
50
+ const permSet = await con.describe('PermissionSet');
51
+ const describeAvailablePerms = {};
52
+ permSet.fields
53
+ .filter((field) => field.name.startsWith('Permissions'))
54
+ .forEach((field) => {
55
+ const permName = field.name.replace('Permissions', '');
56
+ describeAvailablePerms[permName] = {
57
+ label: field.label,
58
+ name: permName,
59
+ };
65
60
  });
61
+ return describeAvailablePerms;
62
+ }
63
+ async function findAssignedPerms(con) {
64
+ const assignedPerms = {};
65
+ const profiles = await con.query(PROFILES_QUERY);
66
+ if (profiles.records?.length > 0) {
67
+ const mdapi = new MDAPI(con);
68
+ const resolvedProfiles = await mdapi.resolve('Profile', profiles.records.map((p) => p.Profile.Name));
69
+ Object.values(resolvedProfiles).forEach((profile) => {
70
+ profile.userPermissions.forEach((userPerm) => {
71
+ assignedPerms[userPerm.name] = { name: userPerm.name };
72
+ });
73
+ });
74
+ }
75
+ return assignedPerms;
66
76
  }
67
77
  function sanitiseLabel(rawLabel) {
68
78
  return rawLabel?.replace(/[ \t]+$|[\r\n]+/g, '');
@@ -1 +1 @@
1
- {"version":3,"file":"permissionsClassification.js","sourceRoot":"","sources":["../../../src/libs/conf-init/permissionsClassification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissionsClassification.js","sourceRoot":"","sources":["../../../src/libs/conf-init/permissionsClassification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { NamedPermissionsClassification } from '../../core/file-mgmt/schema.js';
2
+ import NonePreset from './none.js';
3
+ export default class LoosePreset extends NonePreset {
4
+ constructor();
5
+ initDefault(permName: string): NamedPermissionsClassification;
6
+ }
@@ -0,0 +1,35 @@
1
+ import { PermissionRiskLevel } from '../../core/classification-types.js';
2
+ import NonePreset from './none.js';
3
+ export default class LoosePreset extends NonePreset {
4
+ constructor() {
5
+ super({
6
+ UseAnyApiClient: PermissionRiskLevel.HIGH,
7
+ CustomizeApplication: PermissionRiskLevel.HIGH,
8
+ ModifyMetadata: PermissionRiskLevel.HIGH,
9
+ AuthorApex: PermissionRiskLevel.HIGH,
10
+ ManageAuthProviders: PermissionRiskLevel.HIGH,
11
+ Packaging2: PermissionRiskLevel.HIGH,
12
+ Packaging2Delete: PermissionRiskLevel.HIGH,
13
+ Packaging2PromoteVersion: PermissionRiskLevel.HIGH,
14
+ InstallPackaging: PermissionRiskLevel.HIGH,
15
+ ViewClientSecret: PermissionRiskLevel.HIGH,
16
+ ManageTwoFactor: PermissionRiskLevel.HIGH,
17
+ ManageRemoteAccess: PermissionRiskLevel.HIGH,
18
+ CanApproveUninstalledApps: PermissionRiskLevel.HIGH,
19
+ ViewSetup: PermissionRiskLevel.MEDIUM,
20
+ ViewAllData: PermissionRiskLevel.MEDIUM,
21
+ ModifyAllData: PermissionRiskLevel.MEDIUM,
22
+ ExportReport: PermissionRiskLevel.MEDIUM,
23
+ EmailMass: PermissionRiskLevel.MEDIUM,
24
+ ApiEnabled: PermissionRiskLevel.LOW,
25
+ });
26
+ }
27
+ initDefault(permName) {
28
+ const basePerm = super.initDefault(permName);
29
+ if (basePerm.classification === PermissionRiskLevel.UNKNOWN) {
30
+ basePerm.classification = PermissionRiskLevel.LOW;
31
+ }
32
+ return basePerm;
33
+ }
34
+ }
35
+ //# sourceMappingURL=loose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loose.js","sourceRoot":"","sources":["../../../../src/libs/conf-init/presets/loose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,UAAU,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU;IACjD;QACE,KAAK,CAAC;YACJ,eAAe,EAAE,mBAAmB,CAAC,IAAI;YACzC,oBAAoB,EAAE,mBAAmB,CAAC,IAAI;YAC9C,cAAc,EAAE,mBAAmB,CAAC,IAAI;YACxC,UAAU,EAAE,mBAAmB,CAAC,IAAI;YACpC,mBAAmB,EAAE,mBAAmB,CAAC,IAAI;YAC7C,UAAU,EAAE,mBAAmB,CAAC,IAAI;YACpC,gBAAgB,EAAE,mBAAmB,CAAC,IAAI;YAC1C,wBAAwB,EAAE,mBAAmB,CAAC,IAAI;YAClD,gBAAgB,EAAE,mBAAmB,CAAC,IAAI;YAC1C,gBAAgB,EAAE,mBAAmB,CAAC,IAAI;YAC1C,eAAe,EAAE,mBAAmB,CAAC,IAAI;YACzC,kBAAkB,EAAE,mBAAmB,CAAC,IAAI;YAC5C,yBAAyB,EAAE,mBAAmB,CAAC,IAAI;YACnD,SAAS,EAAE,mBAAmB,CAAC,MAAM;YACrC,WAAW,EAAE,mBAAmB,CAAC,MAAM;YACvC,aAAa,EAAE,mBAAmB,CAAC,MAAM;YACzC,YAAY,EAAE,mBAAmB,CAAC,MAAM;YACxC,SAAS,EAAE,mBAAmB,CAAC,MAAM;YACrC,UAAU,EAAE,mBAAmB,CAAC,GAAG;SACpC,CAAC,CAAC;IACL,CAAC;IAEe,WAAW,CAAC,QAAgB;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,cAAc,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC5D,QAAQ,CAAC,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC;QACpD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ import { NamedPermissionsClassification } from '../../core/file-mgmt/schema.js';
2
+ import { PermissionRiskLevel } from '../../core/classification-types.js';
3
+ import { Optional } from '../../core/utils.js';
4
+ export type UnclassifiedPerm = Optional<NamedPermissionsClassification, 'classification'>;
5
+ export type Preset = {
6
+ classifyUserPermissions(rawPerms: UnclassifiedPerm[]): NamedPermissionsClassification[];
7
+ };
8
+ /**
9
+ * A "blank" preset that is extended by all other presets
10
+ * and initialises classification descriptions
11
+ */
12
+ export default class NonePreset implements Preset {
13
+ protected userPermissions: Record<string, Partial<NamedPermissionsClassification>>;
14
+ constructor(userPerms?: Record<string, PermissionRiskLevel>);
15
+ /**
16
+ * Finalises permissions for all unclassified user perms that are set
17
+ * in this preset.
18
+ *
19
+ * @param perms
20
+ */
21
+ classifyUserPermissions(rawPerms: UnclassifiedPerm[]): NamedPermissionsClassification[];
22
+ /**
23
+ * Initialises a default classification for a given permission name.
24
+ * This merges pre-configured defaults with available descriptions.
25
+ *
26
+ * @param permName
27
+ * @returns
28
+ */
29
+ initDefault(permName: string): NamedPermissionsClassification;
30
+ }
@@ -0,0 +1,54 @@
1
+ import { Messages } from '@salesforce/core';
2
+ import { PermissionRiskLevel } from '../../core/classification-types.js';
3
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
4
+ const descriptions = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'policyclassifications');
5
+ /**
6
+ * A "blank" preset that is extended by all other presets
7
+ * and initialises classification descriptions
8
+ */
9
+ export default class NonePreset {
10
+ userPermissions;
11
+ constructor(userPerms) {
12
+ this.userPermissions = {};
13
+ if (userPerms) {
14
+ Object.entries(userPerms).forEach(([name, classification]) => {
15
+ if (this.userPermissions[name]) {
16
+ this.userPermissions[name].classification = classification;
17
+ }
18
+ else {
19
+ this.userPermissions[name] = { classification };
20
+ }
21
+ });
22
+ }
23
+ }
24
+ /**
25
+ * Finalises permissions for all unclassified user perms that are set
26
+ * in this preset.
27
+ *
28
+ * @param perms
29
+ */
30
+ classifyUserPermissions(rawPerms) {
31
+ return rawPerms.map((perm) => ({
32
+ ...this.initDefault(perm.name),
33
+ ...perm,
34
+ }));
35
+ }
36
+ /**
37
+ * Initialises a default classification for a given permission name.
38
+ * This merges pre-configured defaults with available descriptions.
39
+ *
40
+ * @param permName
41
+ * @returns
42
+ */
43
+ initDefault(permName) {
44
+ const def = this.userPermissions[permName];
45
+ const hasDescription = descriptions.messages.has(permName);
46
+ return {
47
+ ...def,
48
+ name: permName,
49
+ classification: def?.classification ?? PermissionRiskLevel.UNKNOWN,
50
+ reason: hasDescription ? descriptions.getMessage(permName) : undefined,
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=none.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"none.js","sourceRoot":"","sources":["../../../../src/libs/conf-init/presets/none.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAGzE,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,oCAAoC,EAAE,uBAAuB,CAAC,CAAC;AAQ1G;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IACnB,eAAe,CAA0D;IAEnF,YAAmB,SAA+C;QAChE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE;gBAC3D,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,GAAG,cAAc,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC;gBAClD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,uBAAuB,CAAC,QAA4B;QACzD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,GAAG,IAAI;SACR,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACI,WAAW,CAAC,QAAgB;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO;YACL,GAAG,GAAG;YACN,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,mBAAmB,CAAC,OAAO;YAClE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SACvE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import NonePreset from './none.js';
2
+ export default class StrictPreset extends NonePreset {
3
+ constructor();
4
+ }
@@ -0,0 +1,28 @@
1
+ import { PermissionRiskLevel } from '../../core/classification-types.js';
2
+ import NonePreset from './none.js';
3
+ export default class StrictPreset extends NonePreset {
4
+ constructor() {
5
+ super({
6
+ UseAnyApiClient: PermissionRiskLevel.BLOCKED,
7
+ CustomizeApplication: PermissionRiskLevel.CRITICAL,
8
+ ModifyMetadata: PermissionRiskLevel.CRITICAL,
9
+ AuthorApex: PermissionRiskLevel.CRITICAL,
10
+ ManageAuthProviders: PermissionRiskLevel.CRITICAL,
11
+ Packaging2: PermissionRiskLevel.CRITICAL,
12
+ Packaging2Delete: PermissionRiskLevel.CRITICAL,
13
+ Packaging2PromoteVersion: PermissionRiskLevel.CRITICAL,
14
+ InstallPackaging: PermissionRiskLevel.CRITICAL,
15
+ ViewClientSecret: PermissionRiskLevel.CRITICAL,
16
+ ExportReport: PermissionRiskLevel.HIGH,
17
+ ViewSetup: PermissionRiskLevel.HIGH,
18
+ ApiEnabled: PermissionRiskLevel.HIGH,
19
+ ViewAllData: PermissionRiskLevel.HIGH,
20
+ ModifyAllData: PermissionRiskLevel.HIGH,
21
+ ManageTwoFactor: PermissionRiskLevel.HIGH,
22
+ ManageRemoteAccess: PermissionRiskLevel.HIGH,
23
+ CanApproveUninstalledApps: PermissionRiskLevel.HIGH,
24
+ EmailMass: PermissionRiskLevel.MEDIUM,
25
+ });
26
+ }
27
+ }
28
+ //# sourceMappingURL=strict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strict.js","sourceRoot":"","sources":["../../../../src/libs/conf-init/presets/strict.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,UAAU,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU;IAClD;QACE,KAAK,CAAC;YACJ,eAAe,EAAE,mBAAmB,CAAC,OAAO;YAC5C,oBAAoB,EAAE,mBAAmB,CAAC,QAAQ;YAClD,cAAc,EAAE,mBAAmB,CAAC,QAAQ;YAC5C,UAAU,EAAE,mBAAmB,CAAC,QAAQ;YACxC,mBAAmB,EAAE,mBAAmB,CAAC,QAAQ;YACjD,UAAU,EAAE,mBAAmB,CAAC,QAAQ;YACxC,gBAAgB,EAAE,mBAAmB,CAAC,QAAQ;YAC9C,wBAAwB,EAAE,mBAAmB,CAAC,QAAQ;YACtD,gBAAgB,EAAE,mBAAmB,CAAC,QAAQ;YAC9C,gBAAgB,EAAE,mBAAmB,CAAC,QAAQ;YAC9C,YAAY,EAAE,mBAAmB,CAAC,IAAI;YACtC,SAAS,EAAE,mBAAmB,CAAC,IAAI;YACnC,UAAU,EAAE,mBAAmB,CAAC,IAAI;YACpC,WAAW,EAAE,mBAAmB,CAAC,IAAI;YACrC,aAAa,EAAE,mBAAmB,CAAC,IAAI;YACvC,eAAe,EAAE,mBAAmB,CAAC,IAAI;YACzC,kBAAkB,EAAE,mBAAmB,CAAC,IAAI;YAC5C,yBAAyB,EAAE,mBAAmB,CAAC,IAAI;YACnD,SAAS,EAAE,mBAAmB,CAAC,MAAM;SACtC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { Preset } from './presets/none.js';
2
+ export declare enum AuditInitPresets {
3
+ strict = "strict",
4
+ loose = "loose",
5
+ none = "none"
6
+ }
7
+ export declare function loadPreset(presetName?: AuditInitPresets): Preset;
@@ -0,0 +1,20 @@
1
+ import LoosePreset from './presets/loose.js';
2
+ import NonePreset from './presets/none.js';
3
+ import StrictPreset from './presets/strict.js';
4
+ export var AuditInitPresets;
5
+ (function (AuditInitPresets) {
6
+ AuditInitPresets["strict"] = "strict";
7
+ AuditInitPresets["loose"] = "loose";
8
+ AuditInitPresets["none"] = "none";
9
+ })(AuditInitPresets || (AuditInitPresets = {}));
10
+ export function loadPreset(presetName) {
11
+ switch (presetName) {
12
+ case AuditInitPresets.loose:
13
+ return new LoosePreset();
14
+ case AuditInitPresets.strict:
15
+ return new StrictPreset();
16
+ default:
17
+ return new NonePreset();
18
+ }
19
+ }
20
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/libs/conf-init/presets.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,UAAsB,MAAM,mBAAmB,CAAC;AACvD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAE/C,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,mCAAe,CAAA;IACf,iCAAa,CAAA;AACf,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,UAAU,UAAU,CAAC,UAA6B;IACtD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B;YACE,OAAO,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}