@j-schreiber/sf-cli-security-audit 0.19.3 → 0.20.1

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 (101) hide show
  1. package/README.md +3 -3
  2. package/lib/commands/org/audit/init.d.ts +1 -1
  3. package/lib/commands/org/audit/init.js +8 -8
  4. package/lib/commands/org/audit/init.js.map +1 -1
  5. package/lib/commands/org/audit/run.js +4 -1
  6. package/lib/commands/org/audit/run.js.map +1 -1
  7. package/lib/libs/audit-engine/auditRun.d.ts +7 -4
  8. package/lib/libs/audit-engine/auditRun.js +27 -9
  9. package/lib/libs/audit-engine/auditRun.js.map +1 -1
  10. package/lib/libs/audit-engine/file-manager/fileManager.d.ts +5 -6
  11. package/lib/libs/audit-engine/file-manager/fileManager.js +34 -15
  12. package/lib/libs/audit-engine/file-manager/fileManager.js.map +1 -1
  13. package/lib/libs/audit-engine/file-manager/fileManager.types.d.ts +1 -0
  14. package/lib/libs/audit-engine/index.d.ts +72 -43
  15. package/lib/libs/audit-engine/registry/context.types.d.ts +8 -2
  16. package/lib/libs/audit-engine/registry/definitions.d.ts +73 -44
  17. package/lib/libs/audit-engine/registry/policies/permissionSets.js +1 -1
  18. package/lib/libs/audit-engine/registry/policies/permissionSets.js.map +1 -1
  19. package/lib/libs/audit-engine/registry/policies/profiles.js +1 -1
  20. package/lib/libs/audit-engine/registry/policies/profiles.js.map +1 -1
  21. package/lib/libs/audit-engine/registry/policies/users.js +1 -1
  22. package/lib/libs/audit-engine/registry/policies/users.js.map +1 -1
  23. package/lib/libs/audit-engine/registry/policy.js +2 -2
  24. package/lib/libs/audit-engine/registry/policy.js.map +1 -1
  25. package/lib/libs/audit-engine/registry/roles/roleManager.d.ts +3 -19
  26. package/lib/libs/audit-engine/registry/roles/roleManager.js +17 -29
  27. package/lib/libs/audit-engine/registry/roles/roleManager.js.map +1 -1
  28. package/lib/libs/audit-engine/registry/roles/roleManager.types.d.ts +21 -3
  29. package/lib/libs/audit-engine/registry/roles/userRole.d.ts +7 -6
  30. package/lib/libs/audit-engine/registry/roles/userRole.js +78 -31
  31. package/lib/libs/audit-engine/registry/roles/userRole.js.map +1 -1
  32. package/lib/libs/audit-engine/registry/rules/enforcePermissionPresets.js +5 -4
  33. package/lib/libs/audit-engine/registry/rules/enforcePermissionPresets.js.map +1 -1
  34. package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnProfileLike.js +3 -3
  35. package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnProfileLike.js.map +1 -1
  36. package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnUser.js +4 -4
  37. package/lib/libs/audit-engine/registry/rules/enforcePermissionsOnUser.js.map +1 -1
  38. package/lib/libs/audit-engine/registry/shape/auditConfigShape.d.ts +71 -42
  39. package/lib/libs/audit-engine/registry/shape/auditConfigShape.js +26 -30
  40. package/lib/libs/audit-engine/registry/shape/auditConfigShape.js.map +1 -1
  41. package/lib/libs/audit-engine/registry/shape/schema.d.ts +77 -43
  42. package/lib/libs/audit-engine/registry/shape/schema.js +22 -20
  43. package/lib/libs/audit-engine/registry/shape/schema.js.map +1 -1
  44. package/lib/libs/audit-engine/registry/shape/shapeValidation.d.ts +3 -0
  45. package/lib/libs/audit-engine/registry/shape/shapeValidation.js +36 -7
  46. package/lib/libs/audit-engine/registry/shape/shapeValidation.js.map +1 -1
  47. package/lib/libs/conf-init/auditConfig.d.ts +1 -0
  48. package/lib/libs/conf-init/auditConfig.js +18 -10
  49. package/lib/libs/conf-init/auditConfig.js.map +1 -1
  50. package/lib/libs/conf-init/defaultClassifications.d.ts +5 -7
  51. package/lib/libs/conf-init/defaultClassifications.js +18 -28
  52. package/lib/libs/conf-init/defaultClassifications.js.map +1 -1
  53. package/lib/libs/conf-init/init.types.d.ts +7 -6
  54. package/lib/libs/conf-init/init.types.js.map +1 -1
  55. package/lib/libs/quick-scan/userPermissionScanner.js +12 -9
  56. package/lib/libs/quick-scan/userPermissionScanner.js.map +1 -1
  57. package/lib/salesforce/connection.d.ts +52 -0
  58. package/lib/salesforce/connection.js +130 -0
  59. package/lib/salesforce/connection.js.map +1 -0
  60. package/lib/salesforce/describes/orgDescribe.d.ts +13 -2
  61. package/lib/salesforce/describes/orgDescribe.js +16 -0
  62. package/lib/salesforce/describes/orgDescribe.js.map +1 -1
  63. package/lib/salesforce/index.d.ts +1 -0
  64. package/lib/salesforce/index.js +1 -0
  65. package/lib/salesforce/index.js.map +1 -1
  66. package/lib/salesforce/mdapi/genericSettingsMetadata.d.ts +2 -2
  67. package/lib/salesforce/mdapi/genericSettingsMetadata.js.map +1 -1
  68. package/lib/salesforce/mdapi/mdapi.d.ts +4 -4
  69. package/lib/salesforce/mdapi/mdapi.js +8 -8
  70. package/lib/salesforce/mdapi/mdapi.js.map +1 -1
  71. package/lib/salesforce/mdapi/metadataRegistryEntry.d.ts +3 -3
  72. package/lib/salesforce/mdapi/metadataRegistryEntry.js +1 -9
  73. package/lib/salesforce/mdapi/metadataRegistryEntry.js.map +1 -1
  74. package/lib/salesforce/mdapi/namedMetadataToolingQueryable.d.ts +2 -2
  75. package/lib/salesforce/mdapi/namedMetadataToolingQueryable.js +1 -1
  76. package/lib/salesforce/mdapi/namedMetadataToolingQueryable.js.map +1 -1
  77. package/lib/salesforce/mdapi/namedMetadataType.d.ts +2 -2
  78. package/lib/salesforce/mdapi/namedMetadataType.js.map +1 -1
  79. package/lib/salesforce/mdapi/singletonMetadataType.d.ts +2 -2
  80. package/lib/salesforce/mdapi/singletonMetadataType.js.map +1 -1
  81. package/lib/salesforce/repositories/connected-apps/connected-apps.d.ts +2 -2
  82. package/lib/salesforce/repositories/connected-apps/connected-apps.js.map +1 -1
  83. package/lib/salesforce/repositories/connected-apps/oauth-tokens.d.ts +2 -2
  84. package/lib/salesforce/repositories/connected-apps/oauth-tokens.js +3 -7
  85. package/lib/salesforce/repositories/connected-apps/oauth-tokens.js.map +1 -1
  86. package/lib/salesforce/repositories/perm-sets/permission-sets.d.ts +2 -2
  87. package/lib/salesforce/repositories/perm-sets/permission-sets.js.map +1 -1
  88. package/lib/salesforce/repositories/profiles/profiles.d.ts +2 -2
  89. package/lib/salesforce/repositories/profiles/profiles.js.map +1 -1
  90. package/lib/salesforce/repositories/users/users.d.ts +3 -3
  91. package/lib/salesforce/repositories/users/users.js +6 -6
  92. package/lib/salesforce/repositories/users/users.js.map +1 -1
  93. package/messages/auditShapeValidation.md +4 -0
  94. package/messages/org.audit.run.md +4 -0
  95. package/messages/rules.enforceClassificationPresets.md +4 -8
  96. package/messages/salesforceConnectionErrors.md +11 -0
  97. package/oclif.manifest.json +1 -1
  98. package/package.json +1 -1
  99. package/lib/libs/audit-engine/registry/helpers/permissionsScanning.d.ts +0 -37
  100. package/lib/libs/audit-engine/registry/helpers/permissionsScanning.js +0 -81
  101. package/lib/libs/audit-engine/registry/helpers/permissionsScanning.js.map +0 -1
@@ -1,81 +0,0 @@
1
- import { Messages } from '@salesforce/core';
2
- import { PermissionRiskLevel, UserPrivilegeLevel } from '../shape/schema.js';
3
- Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
4
- const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'rules.enforceClassificationPresets');
5
- /**
6
- * Scan userPermissions and customPermissions of a profile or permission set and
7
- * get a unified scan result with violations (risk level not allowed) and warnings
8
- * (risk level not classified)
9
- *
10
- * @param profileLike
11
- * @param auditRun
12
- * @param rootIdentifier Optional root identifier for messages to prepend.
13
- * @returns
14
- */
15
- export function scanProfileLike(profileLike, auditRun, rootIdentifier) {
16
- if (!profileLike.metadata) {
17
- return { violations: [], warnings: [] };
18
- }
19
- const userPermsResult = scanPermissions(profileLike, 'userPermissions', auditRun, rootIdentifier);
20
- const customPermsResult = scanPermissions(profileLike, 'customPermissions', auditRun, rootIdentifier);
21
- userPermsResult.violations.push(...customPermsResult.violations);
22
- userPermsResult.warnings.push(...customPermsResult.warnings);
23
- return userPermsResult;
24
- }
25
- export function scanPermissions(profile, permissionListName, auditRun, rootIdentifier) {
26
- const result = { warnings: [], violations: [] };
27
- for (const perm of profile.metadata[permissionListName]) {
28
- const identifier = rootIdentifier ? [...rootIdentifier, profile.name, perm.name] : [profile.name, perm.name];
29
- const permClassification = resolvePerm(perm.name, auditRun, permissionListName);
30
- if (permClassification) {
31
- if (permClassification.classification === PermissionRiskLevel.BLOCKED) {
32
- result.violations.push({
33
- identifier,
34
- message: messages.getMessage('violations.permission-is-blocked'),
35
- });
36
- }
37
- else if (!permissionAllowedInPreset(permClassification.classification, profile.role)) {
38
- result.violations.push({
39
- identifier,
40
- message: messages.getMessage('violations.classification-preset-mismatch', [
41
- permClassification.classification,
42
- profile.role,
43
- ]),
44
- });
45
- }
46
- else if (permClassification.classification === PermissionRiskLevel.UNKNOWN) {
47
- result.warnings.push({
48
- identifier,
49
- message: messages.getMessage('warnings.permission-unknown'),
50
- });
51
- }
52
- }
53
- else {
54
- result.warnings.push({
55
- identifier,
56
- message: messages.getMessage('warnings.permission-not-classified'),
57
- });
58
- }
59
- }
60
- return result;
61
- }
62
- export function resolvePresetOrdinalValue(value) {
63
- return Object.keys(UserPrivilegeLevel).indexOf(value.toUpperCase().replace(' ', '_'));
64
- }
65
- export function permissionAllowedInPreset(permClassification, preset) {
66
- // this works, as long as we are mindful when adding new risk levels and presets
67
- const invertedPermValue = Object.keys(PermissionRiskLevel).length - resolveRiskLevelOrdinalValue(permClassification);
68
- const invertedPresetValue = Object.keys(UserPrivilegeLevel).length - resolvePresetOrdinalValue(preset);
69
- return invertedPresetValue >= invertedPermValue;
70
- }
71
- function resolveRiskLevelOrdinalValue(value) {
72
- return Object.keys(PermissionRiskLevel).indexOf(value.toUpperCase());
73
- }
74
- export const classificationSorter = (a, b) => resolveRiskLevelOrdinalValue(a.classification) - resolveRiskLevelOrdinalValue(b.classification);
75
- function resolvePerm(permName, auditRun, type) {
76
- return nameClassification(permName, auditRun.classifications[type]?.permissions[permName]);
77
- }
78
- function nameClassification(permName, perm) {
79
- return perm ? { name: permName, ...perm } : undefined;
80
- }
81
- //# sourceMappingURL=permissionsScanning.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permissionsScanning.js","sourceRoot":"","sources":["../../../../../src/libs/audit-engine/registry/helpers/permissionsScanning.ts"],"names":[],"mappings":"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"}