@j-schreiber/sf-cli-security-audit 0.6.0 → 0.7.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 (90) hide show
  1. package/README.md +39 -2
  2. package/lib/commands/org/audit/init.js +2 -1
  3. package/lib/commands/org/audit/init.js.map +1 -1
  4. package/lib/commands/org/audit/run.js +10 -4
  5. package/lib/commands/org/audit/run.js.map +1 -1
  6. package/lib/commands/org/scan/user-perms.js +1 -2
  7. package/lib/commands/org/scan/user-perms.js.map +1 -1
  8. package/lib/libs/conf-init/auditConfig.js +5 -4
  9. package/lib/libs/conf-init/auditConfig.js.map +1 -1
  10. package/lib/libs/conf-init/policyConfigs.d.ts +7 -1
  11. package/lib/libs/conf-init/policyConfigs.js +29 -3
  12. package/lib/libs/conf-init/policyConfigs.js.map +1 -1
  13. package/lib/libs/conf-init/presets/loose.js +16 -0
  14. package/lib/libs/conf-init/presets/loose.js.map +1 -1
  15. package/lib/libs/conf-init/presets/strict.js +17 -0
  16. package/lib/libs/conf-init/presets/strict.js.map +1 -1
  17. package/lib/libs/{policies → core}/auditRun.d.ts +4 -4
  18. package/lib/libs/{policies → core}/auditRun.js +8 -14
  19. package/lib/libs/core/auditRun.js.map +1 -0
  20. package/lib/libs/core/constants.d.ts +5 -0
  21. package/lib/libs/core/constants.js +10 -0
  22. package/lib/libs/core/constants.js.map +1 -1
  23. package/lib/libs/core/file-mgmt/auditConfigFileManager.d.ts +4 -2
  24. package/lib/libs/core/file-mgmt/auditConfigFileManager.js +38 -51
  25. package/lib/libs/core/file-mgmt/auditConfigFileManager.js.map +1 -1
  26. package/lib/libs/core/file-mgmt/schema.d.ts +33 -11
  27. package/lib/libs/core/file-mgmt/schema.js +24 -1
  28. package/lib/libs/core/file-mgmt/schema.js.map +1 -1
  29. package/lib/libs/core/policies/connectedAppPolicy.d.ts +10 -0
  30. package/lib/libs/{policies → core/policies}/connectedAppPolicy.js +4 -4
  31. package/lib/libs/core/policies/connectedAppPolicy.js.map +1 -0
  32. package/lib/libs/core/policies/permissionSetPolicy.d.ts +11 -0
  33. package/lib/libs/{policies → core/policies}/permissionSetPolicy.js +4 -4
  34. package/lib/libs/core/policies/permissionSetPolicy.js.map +1 -0
  35. package/lib/libs/{policies → core/policies}/policy.d.ts +11 -11
  36. package/lib/libs/{policies → core/policies}/policy.js +5 -0
  37. package/lib/libs/core/policies/policy.js.map +1 -0
  38. package/lib/libs/core/policies/profilePolicy.d.ts +11 -0
  39. package/lib/libs/{policies → core/policies}/profilePolicy.js +4 -4
  40. package/lib/libs/core/policies/profilePolicy.js.map +1 -0
  41. package/lib/libs/{policies → core/policies}/salesforceStandardTypes.d.ts +14 -0
  42. package/lib/libs/core/policies/salesforceStandardTypes.js.map +1 -0
  43. package/lib/libs/core/policies/userPolicy.d.ts +11 -0
  44. package/lib/libs/core/policies/userPolicy.js +104 -0
  45. package/lib/libs/core/policies/userPolicy.js.map +1 -0
  46. package/lib/libs/core/policyRegistry.d.ts +23 -0
  47. package/lib/libs/core/policyRegistry.js +38 -0
  48. package/lib/libs/core/policyRegistry.js.map +1 -0
  49. package/lib/libs/core/registries/ruleRegistry.d.ts +1 -3
  50. package/lib/libs/core/registries/ruleRegistry.js +1 -1
  51. package/lib/libs/core/registries/ruleRegistry.js.map +1 -1
  52. package/lib/libs/core/registries/rules/noInactiveUsers.d.ts +9 -0
  53. package/lib/libs/core/registries/rules/noInactiveUsers.js +44 -0
  54. package/lib/libs/core/registries/rules/noInactiveUsers.js.map +1 -0
  55. package/lib/libs/core/registries/rules/noOtherApexApiLogins.d.ts +7 -0
  56. package/lib/libs/core/registries/rules/noOtherApexApiLogins.js +24 -0
  57. package/lib/libs/core/registries/rules/noOtherApexApiLogins.js.map +1 -0
  58. package/lib/libs/core/registries/rules/policyRule.d.ts +6 -1
  59. package/lib/libs/core/registries/rules/policyRule.js +12 -0
  60. package/lib/libs/core/registries/rules/policyRule.js.map +1 -1
  61. package/lib/libs/core/registries/types.d.ts +2 -0
  62. package/lib/libs/core/registries/types.js +2 -0
  63. package/lib/libs/core/registries/types.js.map +1 -1
  64. package/lib/libs/core/registries/users.d.ts +26 -0
  65. package/lib/libs/core/registries/users.js +10 -0
  66. package/lib/libs/core/registries/users.js.map +1 -0
  67. package/lib/libs/core/result-types.d.ts +2 -1
  68. package/lib/libs/core/utils.d.ts +7 -0
  69. package/lib/libs/core/utils.js +12 -0
  70. package/lib/libs/core/utils.js.map +1 -1
  71. package/lib/ux/auditRunMultiStage.d.ts +1 -1
  72. package/lib/ux/auditRunMultiStage.js +22 -19
  73. package/lib/ux/auditRunMultiStage.js.map +1 -1
  74. package/messages/org.audit.init.md +3 -3
  75. package/messages/org.audit.run.md +11 -3
  76. package/messages/org.scan.user-perms.md +8 -10
  77. package/messages/policies.general.md +4 -0
  78. package/messages/rules.users.md +11 -0
  79. package/oclif.manifest.json +12 -12
  80. package/package.json +1 -1
  81. package/lib/libs/policies/auditRun.js.map +0 -1
  82. package/lib/libs/policies/connectedAppPolicy.d.ts +0 -9
  83. package/lib/libs/policies/connectedAppPolicy.js.map +0 -1
  84. package/lib/libs/policies/permissionSetPolicy.d.ts +0 -10
  85. package/lib/libs/policies/permissionSetPolicy.js.map +0 -1
  86. package/lib/libs/policies/policy.js.map +0 -1
  87. package/lib/libs/policies/profilePolicy.d.ts +0 -10
  88. package/lib/libs/policies/profilePolicy.js.map +0 -1
  89. package/lib/libs/policies/salesforceStandardTypes.js.map +0 -1
  90. /package/lib/libs/{policies → core/policies}/salesforceStandardTypes.js +0 -0
@@ -2,8 +2,9 @@ import path from 'node:path';
2
2
  import fs from 'node:fs';
3
3
  import yaml from 'js-yaml';
4
4
  import { Messages } from '@salesforce/core';
5
- import { capitalize, isEmpty, uncapitalize } from '../utils.js';
6
- import { PermissionsConfigFileSchema, PermSetsPolicyFileSchema, PolicyFileSchema, ProfilesPolicyFileSchema, } from './schema.js';
5
+ import { isEmpty } from '../utils.js';
6
+ import { classificationDefs, policyDefs } from '../policyRegistry.js';
7
+ import { throwAsSfError, } from './schema.js';
7
8
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
8
9
  const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'org.audit.run');
9
10
  /**
@@ -32,31 +33,8 @@ export default class AuditConfigFileManager {
32
33
  directoryStructure;
33
34
  constructor() {
34
35
  this.directoryStructure = {
35
- policies: {
36
- profiles: {
37
- schema: ProfilesPolicyFileSchema,
38
- dependencies: [
39
- { path: ['classifications', 'userPermissions'], errorName: 'UserPermClassificationRequiredForProfiles' },
40
- ],
41
- },
42
- permissionSets: {
43
- schema: PermSetsPolicyFileSchema,
44
- dependencies: [
45
- { path: ['classifications', 'userPermissions'], errorName: 'UserPermClassificationRequiredForPermSets' },
46
- ],
47
- },
48
- connectedApps: {
49
- schema: PolicyFileSchema,
50
- },
51
- },
52
- classifications: {
53
- userPermissions: {
54
- schema: PermissionsConfigFileSchema,
55
- },
56
- customPermissions: {
57
- schema: PermissionsConfigFileSchema,
58
- },
59
- },
36
+ policies: policyDefs,
37
+ classifications: classificationDefs,
60
38
  };
61
39
  }
62
40
  /**
@@ -68,7 +46,7 @@ export default class AuditConfigFileManager {
68
46
  */
69
47
  parse(dirPath) {
70
48
  const classifications = this.parseSubdir(dirPath, 'classifications');
71
- const policies = capitalizeKeys(this.parseSubdir(dirPath, 'policies'));
49
+ const policies = this.parseSubdir(dirPath, 'policies');
72
50
  const conf = { classifications, policies };
73
51
  assertIsMinimalConfig(conf, dirPath);
74
52
  this.validateDependencies(conf);
@@ -83,41 +61,55 @@ export default class AuditConfigFileManager {
83
61
  * @returns
84
62
  */
85
63
  save(targetDirPath, conf) {
86
- Object.entries(conf).forEach(([dirName, configFiles]) => {
87
- fs.mkdirSync(path.join(targetDirPath, dirName), { recursive: true });
88
- this.writeSubdir(configFiles, dirName, targetDirPath);
89
- });
64
+ this.writeClassifications(conf.classifications, targetDirPath);
65
+ this.writePolicies(conf.policies, targetDirPath);
90
66
  }
91
67
  parseSubdir(dirPath, subdirName) {
92
68
  const parseResults = {};
93
69
  Object.entries(this.directoryStructure[subdirName]).forEach(([fileName, fileConfig]) => {
94
- const filePath = path.join(dirPath, subdirName, `${fileName}.yml`);
70
+ const filePath = path.join(dirPath.toString(), subdirName, `${fileName}.yml`);
95
71
  if (fs.existsSync(filePath)) {
96
72
  const fileContent = yaml.load(fs.readFileSync(filePath, 'utf-8'));
97
- const content = fileConfig.schema.parse(fileContent);
98
- parseResults[fileName] = { filePath, content };
73
+ const parseResult = fileConfig.schema.safeParse(fileContent);
74
+ if (parseResult.success) {
75
+ parseResults[fileName] = { filePath, content: parseResult.data };
76
+ }
77
+ else {
78
+ throwAsSfError(`${fileName}.yml`, parseResult.error);
79
+ }
99
80
  }
100
81
  });
101
82
  return parseResults;
102
83
  }
103
- writeSubdir(configFiles, dirName, targetDirPath) {
104
- const dirConf = this.directoryStructure[dirName];
105
- if (!dirConf) {
106
- return;
107
- }
108
- Object.entries(configFiles).forEach(([fileKey, confFile]) => {
109
- const uncapitalizedKey = uncapitalize(fileKey);
110
- const fileDef = dirConf[uncapitalizedKey];
84
+ writeClassifications(content, targetDirPath) {
85
+ const dirPath = path.join(targetDirPath.toString(), 'classifications');
86
+ fs.mkdirSync(dirPath, { recursive: true });
87
+ const dirConf = this.directoryStructure.classifications;
88
+ Object.entries(content).forEach(([fileKey, confFile]) => {
89
+ const fileDef = dirConf[fileKey];
90
+ if (fileDef && !isEmpty(confFile.content)) {
91
+ // eslint-disable-next-line no-param-reassign
92
+ confFile.filePath = path.join(dirPath, `${fileKey}.yml`);
93
+ fs.writeFileSync(confFile.filePath, yaml.dump(confFile.content));
94
+ }
95
+ });
96
+ }
97
+ writePolicies(content, targetDirPath) {
98
+ const dirPath = path.join(targetDirPath.toString(), 'policies');
99
+ fs.mkdirSync(dirPath, { recursive: true });
100
+ const dirConf = this.directoryStructure.policies;
101
+ Object.entries(content).forEach(([fileKey, confFile]) => {
102
+ const fileDef = dirConf[fileKey];
111
103
  if (fileDef && !isEmpty(confFile.content)) {
112
104
  // eslint-disable-next-line no-param-reassign
113
- confFile.filePath = path.join(targetDirPath, dirName, `${uncapitalizedKey}.yml`);
105
+ confFile.filePath = path.join(dirPath, `${fileKey}.yml`);
114
106
  fs.writeFileSync(confFile.filePath, yaml.dump(confFile.content));
115
107
  }
116
108
  });
117
109
  }
118
110
  validateDependencies(conf) {
119
111
  Object.keys(conf.policies).forEach((policyName) => {
120
- const policyDef = this.directoryStructure.policies[uncapitalize(policyName)];
112
+ const policyDef = this.directoryStructure.policies[policyName];
121
113
  if (policyDef?.dependencies) {
122
114
  policyDef.dependencies.forEach((dependency) => {
123
115
  if (!dependencyExists(dependency.path, conf)) {
@@ -128,11 +120,6 @@ export default class AuditConfigFileManager {
128
120
  });
129
121
  }
130
122
  }
131
- function capitalizeKeys(object) {
132
- const newObj = {};
133
- Object.keys(object).forEach((key) => (newObj[capitalize(key)] = object[key]));
134
- return newObj;
135
- }
136
123
  function dependencyExists(fullPath, rootNode) {
137
124
  const dep = traverseDependencyPath(fullPath, rootNode);
138
125
  return Boolean(dep);
@@ -150,7 +137,7 @@ function traverseDependencyPath(remainingPath, rootNode) {
150
137
  }
151
138
  function assertIsMinimalConfig(conf, dirPath) {
152
139
  if (Object.keys(conf.policies).length === 0) {
153
- const formattedDirPath = !dirPath || dirPath.length === 0 ? '<root-dir>' : dirPath;
140
+ const formattedDirPath = !dirPath || dirPath.toString().length === 0 ? '<root-dir>' : dirPath.toString();
154
141
  throw messages.createError('NoAuditConfigFound', [formattedDirPath]);
155
142
  }
156
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auditConfigFileManager.js","sourceRoot":"","sources":["../../../../src/libs/core/file-mgmt/auditConfigFileManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auditConfigFileManager.js","sourceRoot":"","sources":["../../../../src/libs/core/file-mgmt/auditConfigFileManager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import z from 'zod';
2
2
  import { PermissionRiskLevel } from '../classification-types.js';
3
3
  import { ProfilesRiskPreset } from '../policy-types.js';
4
+ export declare function throwAsSfError(fileName: string, parseError: z.ZodError, rulePath?: PropertyKey[]): never;
4
5
  declare const PermissionsClassificationSchema: z.ZodObject<{
5
6
  label: z.ZodOptional<z.ZodString>;
6
7
  reason: z.ZodOptional<z.ZodString>;
@@ -19,11 +20,11 @@ declare const NamedPermissionsClassificationSchema: z.ZodObject<{
19
20
  }, z.z.core.$strip>;
20
21
  declare const PolicyRuleConfigSchema: z.ZodObject<{
21
22
  enabled: z.ZodDefault<z.ZodBoolean>;
22
- config: z.ZodOptional<z.ZodUnknown>;
23
+ options: z.ZodOptional<z.ZodUnknown>;
23
24
  }, z.z.core.$strip>;
24
25
  declare const RuleMapSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
25
26
  enabled: z.ZodDefault<z.ZodBoolean>;
26
- config: z.ZodOptional<z.ZodUnknown>;
27
+ options: z.ZodOptional<z.ZodUnknown>;
27
28
  }, z.z.core.$strip>>;
28
29
  declare const PermSetConfig: z.ZodObject<{
29
30
  preset: z.ZodEnum<typeof ProfilesRiskPreset>;
@@ -31,18 +32,25 @@ declare const PermSetConfig: z.ZodObject<{
31
32
  declare const PermSetMap: z.ZodRecord<z.ZodString, z.ZodObject<{
32
33
  preset: z.ZodEnum<typeof ProfilesRiskPreset>;
33
34
  }, z.z.core.$strip>>;
35
+ export declare const UsersPolicyConfig: z.ZodObject<{
36
+ defaultRoleForMissingUsers: z.ZodDefault<z.ZodEnum<typeof ProfilesRiskPreset>>;
37
+ analyseLastNDaysOfLoginHistory: z.ZodOptional<z.ZodNumber>;
38
+ }, z.z.core.$strict>;
39
+ export declare const NoInactiveUsersOptionsSchema: z.ZodObject<{
40
+ daysAfterUserIsInactive: z.ZodDefault<z.ZodNumber>;
41
+ }, z.z.core.$strict>;
34
42
  export declare const PolicyFileSchema: z.ZodObject<{
35
43
  enabled: z.ZodDefault<z.ZodBoolean>;
36
44
  rules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
37
45
  enabled: z.ZodDefault<z.ZodBoolean>;
38
- config: z.ZodOptional<z.ZodUnknown>;
46
+ options: z.ZodOptional<z.ZodUnknown>;
39
47
  }, z.z.core.$strip>>>;
40
48
  }, z.z.core.$strip>;
41
49
  export declare const ProfilesPolicyFileSchema: z.ZodObject<{
42
50
  enabled: z.ZodDefault<z.ZodBoolean>;
43
51
  rules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
44
52
  enabled: z.ZodDefault<z.ZodBoolean>;
45
- config: z.ZodOptional<z.ZodUnknown>;
53
+ options: z.ZodOptional<z.ZodUnknown>;
46
54
  }, z.z.core.$strip>>>;
47
55
  profiles: z.ZodRecord<z.ZodString, z.ZodObject<{
48
56
  preset: z.ZodEnum<typeof ProfilesRiskPreset>;
@@ -52,7 +60,7 @@ export declare const PermSetsPolicyFileSchema: z.ZodObject<{
52
60
  enabled: z.ZodDefault<z.ZodBoolean>;
53
61
  rules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
54
62
  enabled: z.ZodDefault<z.ZodBoolean>;
55
- config: z.ZodOptional<z.ZodUnknown>;
63
+ options: z.ZodOptional<z.ZodUnknown>;
56
64
  }, z.z.core.$strip>>>;
57
65
  permissionSets: z.ZodRecord<z.ZodString, z.ZodObject<{
58
66
  preset: z.ZodEnum<typeof ProfilesRiskPreset>;
@@ -65,14 +73,30 @@ export declare const PermissionsConfigFileSchema: z.ZodObject<{
65
73
  classification: z.ZodEnum<typeof PermissionRiskLevel>;
66
74
  }, z.z.core.$strip>>;
67
75
  }, z.z.core.$strip>;
76
+ export declare const UsersPolicyFileSchema: z.ZodObject<{
77
+ enabled: z.ZodDefault<z.ZodBoolean>;
78
+ rules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
79
+ enabled: z.ZodDefault<z.ZodBoolean>;
80
+ options: z.ZodOptional<z.ZodUnknown>;
81
+ }, z.z.core.$strip>>>;
82
+ users: z.ZodRecord<z.ZodString, z.ZodObject<{
83
+ role: z.ZodEnum<typeof ProfilesRiskPreset>;
84
+ }, z.z.core.$strip>>;
85
+ options: z.ZodObject<{
86
+ defaultRoleForMissingUsers: z.ZodDefault<z.ZodEnum<typeof ProfilesRiskPreset>>;
87
+ analyseLastNDaysOfLoginHistory: z.ZodOptional<z.ZodNumber>;
88
+ }, z.z.core.$strict>;
89
+ }, z.z.core.$strip>;
68
90
  export type PermissionsClassification = z.infer<typeof PermissionsClassificationSchema>;
69
91
  export type NamedPermissionsClassification = z.infer<typeof NamedPermissionsClassificationSchema>;
70
92
  export type PermsClassificationsMap = z.infer<typeof PermsClassificationsMapSchema>;
71
93
  export type PermissionsConfig = z.infer<typeof PermissionsConfigFileSchema>;
94
+ export type NoInactiveUsersOptions = z.infer<typeof NoInactiveUsersOptionsSchema>;
72
95
  export type PolicyRuleConfig = z.infer<typeof PolicyRuleConfigSchema>;
73
96
  export type BasePolicyFileContent = z.infer<typeof PolicyFileSchema>;
74
97
  export type ProfilesPolicyFileContent = z.infer<typeof ProfilesPolicyFileSchema>;
75
98
  export type PermSetsPolicyFileContent = z.infer<typeof PermSetsPolicyFileSchema>;
99
+ export type UsersPolicyFileContent = z.infer<typeof UsersPolicyFileSchema>;
76
100
  export type PermissionSetConfig = z.infer<typeof PermSetConfig>;
77
101
  export type PermissionSetLikeMap = z.infer<typeof PermSetMap>;
78
102
  export type RuleMap = z.infer<typeof RuleMapSchema>;
@@ -81,18 +105,16 @@ export type ConfigFile<T> = {
81
105
  content: T;
82
106
  };
83
107
  export type AuditRunConfigClassifications = {
84
- [classificationName: string]: unknown;
85
108
  userPermissions?: ConfigFile<PermissionsConfig>;
86
109
  customPermissions?: ConfigFile<PermissionsConfig>;
87
110
  };
88
111
  export type AuditRunConfigPolicies = {
89
- [policyName: string]: unknown;
90
- Profiles?: ConfigFile<ProfilesPolicyFileContent>;
91
- PermissionSets?: ConfigFile<PermSetsPolicyFileContent>;
92
- ConnectedApps?: ConfigFile<BasePolicyFileContent>;
112
+ profiles?: ConfigFile<ProfilesPolicyFileContent>;
113
+ permissionSets?: ConfigFile<PermSetsPolicyFileContent>;
114
+ connectedApps?: ConfigFile<BasePolicyFileContent>;
115
+ users?: ConfigFile<UsersPolicyFileContent>;
93
116
  };
94
117
  export type AuditRunConfig = {
95
- [configType: string]: unknown;
96
118
  classifications: AuditRunConfigClassifications;
97
119
  policies: AuditRunConfigPolicies;
98
120
  };
@@ -1,6 +1,16 @@
1
1
  import z from 'zod';
2
+ import { Messages } from '@salesforce/core';
2
3
  import { PermissionRiskLevel } from '../classification-types.js';
3
4
  import { ProfilesRiskPreset } from '../policy-types.js';
5
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
6
+ const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'org.audit.run');
7
+ export function throwAsSfError(fileName, parseError, rulePath) {
8
+ const issues = parseError.issues.map((zodIssue) => {
9
+ const definitivePath = rulePath ? [...rulePath, ...zodIssue.path] : zodIssue.path;
10
+ return definitivePath.length > 0 ? `${zodIssue.message} in "${definitivePath.join('.')}"` : zodIssue.message;
11
+ });
12
+ throw messages.createError('error.InvalidConfigFileSchema', [fileName, issues.join(', ')]);
13
+ }
4
14
  const PermissionsClassificationSchema = z.object({
5
15
  /** UI Label */
6
16
  label: z.string().optional(),
@@ -16,13 +26,22 @@ const NamedPermissionsClassificationSchema = PermissionsClassificationSchema.ext
16
26
  });
17
27
  const PolicyRuleConfigSchema = z.object({
18
28
  enabled: z.boolean().default(true),
19
- config: z.unknown().optional(),
29
+ options: z.unknown().optional(),
20
30
  });
21
31
  const RuleMapSchema = z.record(z.string(), PolicyRuleConfigSchema);
22
32
  const PermSetConfig = z.object({
23
33
  preset: z.enum(ProfilesRiskPreset),
24
34
  });
25
35
  const PermSetMap = z.record(z.string(), PermSetConfig);
36
+ const UserConfig = z.object({ role: z.enum(ProfilesRiskPreset) });
37
+ const UsersMap = z.record(z.string(), UserConfig);
38
+ export const UsersPolicyConfig = z.strictObject({
39
+ defaultRoleForMissingUsers: z.enum(ProfilesRiskPreset).default(ProfilesRiskPreset.STANDARD_USER),
40
+ analyseLastNDaysOfLoginHistory: z.number().optional(),
41
+ });
42
+ export const NoInactiveUsersOptionsSchema = z.strictObject({
43
+ daysAfterUserIsInactive: z.number().default(90),
44
+ });
26
45
  // FILE CONTENT SCHEMATA
27
46
  export const PolicyFileSchema = z.object({
28
47
  enabled: z.boolean().default(true),
@@ -37,6 +56,10 @@ export const PermSetsPolicyFileSchema = PolicyFileSchema.extend({
37
56
  export const PermissionsConfigFileSchema = z.object({
38
57
  permissions: z.record(z.string(), PermissionsClassificationSchema),
39
58
  });
59
+ export const UsersPolicyFileSchema = PolicyFileSchema.extend({
60
+ users: UsersMap,
61
+ options: UsersPolicyConfig,
62
+ });
40
63
  export function isPermissionsConfig(cls) {
41
64
  return cls.content?.permissions !== undefined;
42
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/libs/core/file-mgmt/schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,eAAe;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,4DAA4D;IAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,yCAAyC;IACzC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC,CAAC;AAE5F,MAAM,oCAAoC,GAAG,+BAA+B,CAAC,MAAM,CAAC;IAClF,yDAAyD;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAEnE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;AAEvD,wBAAwB;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAC9D,QAAQ,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAC9D,cAAc,EAAE,UAAU;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;CACnE,CAAC,CAAC;AA0CH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAQ,GAAqC,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAQ,GAAyC,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/libs/core/file-mgmt/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AuditRunConfig, BasePolicyFileContent } from '../file-mgmt/schema.js';
2
+ import { AuditContext } from '../registries/types.js';
3
+ import { ResolvedConnectedApp } from '../registries/connectedApps.js';
4
+ import Policy, { ResolveEntityResult } from './policy.js';
5
+ export default class ConnectedAppPolicy extends Policy<ResolvedConnectedApp> {
6
+ config: BasePolicyFileContent;
7
+ auditConfig: AuditRunConfig;
8
+ constructor(config: BasePolicyFileContent, auditConfig: AuditRunConfig, registry?: import("../registries/connectedApps.js").default);
9
+ protected resolveEntities(context: AuditContext): Promise<ResolveEntityResult<ResolvedConnectedApp>>;
10
+ }
@@ -1,11 +1,11 @@
1
- import { CONNECTED_APPS_QUERY, OAUTH_TOKEN_QUERY } from '../core/constants.js';
2
- import { RuleRegistries } from '../core/registries/types.js';
3
- import MDAPI from '../core/mdapi/mdapiRetriever.js';
1
+ import { CONNECTED_APPS_QUERY, OAUTH_TOKEN_QUERY } from '../constants.js';
2
+ import { ConnectedAppsRegistry } from '../registries/connectedApps.js';
3
+ import MDAPI from '../mdapi/mdapiRetriever.js';
4
4
  import Policy, { getTotal } from './policy.js';
5
5
  export default class ConnectedAppPolicy extends Policy {
6
6
  config;
7
7
  auditConfig;
8
- constructor(config, auditConfig, registry = RuleRegistries.ConnectedApps) {
8
+ constructor(config, auditConfig, registry = ConnectedAppsRegistry) {
9
9
  super(config, auditConfig, registry);
10
10
  this.config = config;
11
11
  this.auditConfig = auditConfig;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectedAppPolicy.js","sourceRoot":"","sources":["../../../../src/libs/core/policies/connectedAppPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { AuditRunConfig, PermSetsPolicyFileContent } from '../file-mgmt/schema.js';
2
+ import { AuditContext } from '../registries/types.js';
3
+ import { ResolvedPermissionSet } from '../registries/permissionSets.js';
4
+ import Policy, { ResolveEntityResult } from './policy.js';
5
+ export default class PermissionSetPolicy extends Policy<ResolvedPermissionSet> {
6
+ config: PermSetsPolicyFileContent;
7
+ auditContext: AuditRunConfig;
8
+ private totalEntities;
9
+ constructor(config: PermSetsPolicyFileContent, auditContext: AuditRunConfig, registry?: import("../registries/permissionSets.js").default);
10
+ protected resolveEntities(context: AuditContext): Promise<ResolveEntityResult<ResolvedPermissionSet>>;
11
+ }
@@ -1,7 +1,7 @@
1
1
  import { Messages } from '@salesforce/core';
2
- import MDAPI from '../core/mdapi/mdapiRetriever.js';
3
- import { RuleRegistries } from '../core/registries/types.js';
4
- import { ProfilesRiskPreset } from '../core/policy-types.js';
2
+ import MDAPI from '../mdapi/mdapiRetriever.js';
3
+ import { ProfilesRiskPreset } from '../policy-types.js';
4
+ import { PermissionSetsRegistry } from '../registries/permissionSets.js';
5
5
  import Policy, { getTotal } from './policy.js';
6
6
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
7
7
  const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'policies.general');
@@ -9,7 +9,7 @@ export default class PermissionSetPolicy extends Policy {
9
9
  config;
10
10
  auditContext;
11
11
  totalEntities;
12
- constructor(config, auditContext, registry = RuleRegistries.PermissionSets) {
12
+ constructor(config, auditContext, registry = PermissionSetsRegistry) {
13
13
  super(config, auditContext, registry);
14
14
  this.config = config;
15
15
  this.auditContext = auditContext;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissionSetPolicy.js","sourceRoot":"","sources":["../../../../src/libs/core/policies/permissionSetPolicy.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  import EventEmitter from 'node:events';
2
- import { AuditPolicyResult, EntityResolveError } from '../core/result-types.js';
3
- import { AuditRunConfig, BasePolicyFileContent } from '../core/file-mgmt/schema.js';
4
- import RuleRegistry, { RegistryRuleResolveResult } from '../core/registries/ruleRegistry.js';
5
- import { AuditContext, IPolicy } from '../core/registries/types.js';
6
- export type ResolveEntityResult = {
7
- resolvedEntities: Record<string, unknown>;
2
+ import { AuditPolicyResult, EntityResolveError } from '../result-types.js';
3
+ import { AuditRunConfig, BasePolicyFileContent } from '../file-mgmt/schema.js';
4
+ import RuleRegistry, { RegistryRuleResolveResult } from '../registries/ruleRegistry.js';
5
+ import { AuditContext, IPolicy } from '../registries/types.js';
6
+ export type ResolveEntityResult<T> = {
7
+ resolvedEntities: Record<string, T>;
8
8
  ignoredEntities: EntityResolveError[];
9
9
  };
10
- export default abstract class Policy extends EventEmitter implements IPolicy {
10
+ export default abstract class Policy<T> extends EventEmitter implements IPolicy {
11
11
  config: BasePolicyFileContent;
12
12
  auditConfig: AuditRunConfig;
13
13
  protected registry: RuleRegistry;
14
14
  protected resolvedRules: RegistryRuleResolveResult;
15
- protected entities?: ResolveEntityResult;
15
+ protected entities?: ResolveEntityResult<T>;
16
16
  constructor(config: BasePolicyFileContent, auditConfig: AuditRunConfig, registry: RuleRegistry);
17
17
  /**
18
18
  * Resolves all entities of the policy.
19
19
  */
20
- resolve(context: AuditContext): Promise<ResolveEntityResult>;
20
+ resolve(context: AuditContext): Promise<ResolveEntityResult<T>>;
21
21
  /**
22
22
  * Runs all rules of a policy. If the entities are not yet resolved, they are
23
23
  * resolved on the fly before rules are executed.
@@ -26,6 +26,6 @@ export default abstract class Policy extends EventEmitter implements IPolicy {
26
26
  * @returns
27
27
  */
28
28
  run(context: AuditContext): Promise<AuditPolicyResult>;
29
- protected abstract resolveEntities(context: AuditContext): Promise<ResolveEntityResult>;
29
+ protected abstract resolveEntities(context: AuditContext): Promise<ResolveEntityResult<T>>;
30
30
  }
31
- export declare function getTotal(resolveResult: ResolveEntityResult): number;
31
+ export declare function getTotal(resolveResult: ResolveEntityResult<unknown>): number;
@@ -16,6 +16,11 @@ export default class Policy extends EventEmitter {
16
16
  * Resolves all entities of the policy.
17
17
  */
18
18
  async resolve(context) {
19
+ // when a policy is disabled, we still want to appear it in audit results
20
+ // as disabled with 0 resolved entities and 0 executed rules
21
+ if (!this.config.enabled) {
22
+ return { resolvedEntities: {}, ignoredEntities: [] };
23
+ }
19
24
  if (!this.entities) {
20
25
  this.entities = await this.resolveEntities(context);
21
26
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../src/libs/core/policies/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { AuditRunConfig, ProfilesPolicyFileContent } from '../file-mgmt/schema.js';
2
+ import { AuditContext } from '../registries/types.js';
3
+ import { ResolvedProfile } from '../registries/profiles.js';
4
+ import Policy, { ResolveEntityResult } from './policy.js';
5
+ export default class ProfilePolicy extends Policy<ResolvedProfile> {
6
+ config: ProfilesPolicyFileContent;
7
+ auditConfig: AuditRunConfig;
8
+ private totalEntities;
9
+ constructor(config: ProfilesPolicyFileContent, auditConfig: AuditRunConfig, registry?: import("../registries/profiles.js").default);
10
+ protected resolveEntities(context: AuditContext): Promise<ResolveEntityResult<ResolvedProfile>>;
11
+ }
@@ -1,7 +1,7 @@
1
1
  import { Messages } from '@salesforce/core';
2
- import MDAPI from '../core/mdapi/mdapiRetriever.js';
3
- import { RuleRegistries } from '../core/registries/types.js';
4
- import { ProfilesRiskPreset } from '../core/policy-types.js';
2
+ import MDAPI from '../mdapi/mdapiRetriever.js';
3
+ import { ProfilesRiskPreset } from '../policy-types.js';
4
+ import { ProfilesRegistry } from '../registries/profiles.js';
5
5
  import Policy, { getTotal } from './policy.js';
6
6
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
7
7
  const messages = Messages.loadMessages('@j-schreiber/sf-cli-security-audit', 'policies.general');
@@ -9,7 +9,7 @@ export default class ProfilePolicy extends Policy {
9
9
  config;
10
10
  auditConfig;
11
11
  totalEntities;
12
- constructor(config, auditConfig, registry = RuleRegistries.Profiles) {
12
+ constructor(config, auditConfig, registry = ProfilesRegistry) {
13
13
  super(config, auditConfig, registry);
14
14
  this.config = config;
15
15
  this.auditConfig = auditConfig;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilePolicy.js","sourceRoot":"","sources":["../../../../src/libs/core/policies/profilePolicy.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,9 @@ export type OauthToken = Record & {
18
18
  };
19
19
  export type User = Record & {
20
20
  Username: string;
21
+ LastLoginDate?: string;
22
+ CreatedDate: string;
23
+ Profile: ProfileBasic;
21
24
  };
22
25
  export type Profile = ProfileBasic & {
23
26
  Metadata: JsForceProfile;
@@ -36,4 +39,15 @@ export type PermissionSet = Record & {
36
39
  Profile: ProfileBasic;
37
40
  NamespacePrefix?: string;
38
41
  };
42
+ export type PermissionSetAssignment = Record & {
43
+ AssigneeId: string;
44
+ PermissionSet: Pick<PermissionSet, 'Name'>;
45
+ };
46
+ export type UserLoginsAggregate = Record & {
47
+ LoginType: string;
48
+ Application: string;
49
+ UserId: string;
50
+ LoginCount: number;
51
+ LastLogin: string;
52
+ };
39
53
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"salesforceStandardTypes.js","sourceRoot":"","sources":["../../../../src/libs/core/policies/salesforceStandardTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { AuditRunConfig, UsersPolicyFileContent } from '../file-mgmt/schema.js';
2
+ import { AuditContext } from '../registries/types.js';
3
+ import { ResolvedUser } from '../registries/users.js';
4
+ import Policy, { ResolveEntityResult } from './policy.js';
5
+ export default class UserPolicy extends Policy<ResolvedUser> {
6
+ config: UsersPolicyFileContent;
7
+ auditConfig: AuditRunConfig;
8
+ private totalEntities;
9
+ constructor(config: UsersPolicyFileContent, auditConfig: AuditRunConfig, registry?: import("../registries/users.js").default);
10
+ protected resolveEntities(context: AuditContext): Promise<ResolveEntityResult<ResolvedUser>>;
11
+ }