@vibecheckai/cli 3.5.0 → 3.5.2
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.
- package/bin/registry.js +214 -237
- package/bin/runners/cli-utils.js +33 -2
- package/bin/runners/context/analyzer.js +52 -1
- package/bin/runners/context/generators/cursor.js +2 -49
- package/bin/runners/context/git-context.js +3 -1
- package/bin/runners/context/team-conventions.js +33 -7
- package/bin/runners/lib/analysis-core.js +25 -5
- package/bin/runners/lib/analyzers.js +431 -481
- package/bin/runners/lib/default-config.js +127 -0
- package/bin/runners/lib/doctor/modules/security.js +3 -1
- package/bin/runners/lib/engine/ast-cache.js +210 -0
- package/bin/runners/lib/engine/auth-extractor.js +211 -0
- package/bin/runners/lib/engine/billing-extractor.js +112 -0
- package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
- package/bin/runners/lib/engine/env-extractor.js +207 -0
- package/bin/runners/lib/engine/express-extractor.js +208 -0
- package/bin/runners/lib/engine/extractors.js +849 -0
- package/bin/runners/lib/engine/index.js +207 -0
- package/bin/runners/lib/engine/repo-index.js +514 -0
- package/bin/runners/lib/engine/types.js +124 -0
- package/bin/runners/lib/engines/accessibility-engine.js +18 -218
- package/bin/runners/lib/engines/api-consistency-engine.js +30 -335
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +27 -292
- package/bin/runners/lib/engines/empty-catch-engine.js +17 -127
- package/bin/runners/lib/engines/mock-data-engine.js +10 -53
- package/bin/runners/lib/engines/performance-issues-engine.js +36 -176
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +54 -382
- package/bin/runners/lib/engines/type-aware-engine.js +39 -263
- package/bin/runners/lib/engines/vibecheck-engines/index.js +13 -122
- package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +73 -373
- package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
- package/bin/runners/lib/entitlements-v2.js +73 -97
- package/bin/runners/lib/error-handler.js +44 -3
- package/bin/runners/lib/error-messages.js +289 -0
- package/bin/runners/lib/evidence-pack.js +7 -1
- package/bin/runners/lib/finding-id.js +69 -0
- package/bin/runners/lib/finding-sorter.js +89 -0
- package/bin/runners/lib/html-proof-report.js +700 -350
- package/bin/runners/lib/missions/plan.js +6 -46
- package/bin/runners/lib/missions/templates.js +0 -232
- package/bin/runners/lib/next-action.js +560 -0
- package/bin/runners/lib/prerequisites.js +149 -0
- package/bin/runners/lib/route-detection.js +137 -68
- package/bin/runners/lib/scan-output.js +91 -76
- package/bin/runners/lib/scan-runner.js +135 -0
- package/bin/runners/lib/schemas/ajv-validator.js +464 -0
- package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
- package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
- package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
- package/bin/runners/lib/schemas/run-request.schema.json +108 -0
- package/bin/runners/lib/schemas/validator.js +27 -0
- package/bin/runners/lib/schemas/verdict.schema.json +140 -0
- package/bin/runners/lib/ship-output-enterprise.js +23 -23
- package/bin/runners/lib/ship-output.js +75 -31
- package/bin/runners/lib/terminal-ui.js +6 -113
- package/bin/runners/lib/truth.js +351 -10
- package/bin/runners/lib/unified-cli-output.js +430 -603
- package/bin/runners/lib/unified-output.js +13 -9
- package/bin/runners/runAIAgent.js +10 -5
- package/bin/runners/runAgent.js +0 -3
- package/bin/runners/runAllowlist.js +389 -0
- package/bin/runners/runApprove.js +0 -33
- package/bin/runners/runAuth.js +73 -45
- package/bin/runners/runCheckpoint.js +51 -11
- package/bin/runners/runClassify.js +85 -21
- package/bin/runners/runContext.js +0 -3
- package/bin/runners/runDoctor.js +41 -28
- package/bin/runners/runEvidencePack.js +362 -0
- package/bin/runners/runFirewall.js +0 -3
- package/bin/runners/runFirewallHook.js +0 -3
- package/bin/runners/runFix.js +66 -76
- package/bin/runners/runGuard.js +18 -411
- package/bin/runners/runInit.js +113 -30
- package/bin/runners/runLabs.js +424 -0
- package/bin/runners/runMcp.js +19 -25
- package/bin/runners/runPolish.js +64 -240
- package/bin/runners/runPromptFirewall.js +12 -5
- package/bin/runners/runProve.js +57 -22
- package/bin/runners/runQuickstart.js +531 -0
- package/bin/runners/runReality.js +59 -68
- package/bin/runners/runReport.js +38 -33
- package/bin/runners/runRuntime.js +8 -5
- package/bin/runners/runScan.js +1413 -190
- package/bin/runners/runShip.js +113 -719
- package/bin/runners/runTruth.js +0 -3
- package/bin/runners/runValidate.js +13 -9
- package/bin/runners/runWatch.js +23 -14
- package/bin/scan.js +6 -1
- package/bin/vibecheck.js +204 -185
- package/mcp-server/deprecation-middleware.js +282 -0
- package/mcp-server/handlers/index.ts +15 -0
- package/mcp-server/handlers/tool-handler.ts +554 -0
- package/mcp-server/index-v1.js +698 -0
- package/mcp-server/index.js +210 -238
- package/mcp-server/lib/cache-wrapper.cjs +383 -0
- package/mcp-server/lib/error-envelope.js +138 -0
- package/mcp-server/lib/executor.ts +499 -0
- package/mcp-server/lib/index.ts +19 -0
- package/mcp-server/lib/rate-limiter.js +166 -0
- package/mcp-server/lib/sandbox.test.ts +519 -0
- package/mcp-server/lib/sandbox.ts +395 -0
- package/mcp-server/lib/types.ts +267 -0
- package/mcp-server/package.json +12 -3
- package/mcp-server/registry/tool-registry.js +794 -0
- package/mcp-server/registry/tools.json +605 -0
- package/mcp-server/registry.test.ts +334 -0
- package/mcp-server/tests/tier-gating.test.js +297 -0
- package/mcp-server/tier-auth.js +378 -45
- package/mcp-server/tools-v3.js +353 -442
- package/mcp-server/tsconfig.json +37 -0
- package/mcp-server/vibecheck-2.0-tools.js +14 -1
- package/package.json +1 -1
- package/bin/runners/lib/agent-firewall/learning/learning-engine.js +0 -849
- package/bin/runners/lib/audit-logger.js +0 -532
- package/bin/runners/lib/authority/authorities/architecture.js +0 -364
- package/bin/runners/lib/authority/authorities/compliance.js +0 -341
- package/bin/runners/lib/authority/authorities/human.js +0 -343
- package/bin/runners/lib/authority/authorities/quality.js +0 -420
- package/bin/runners/lib/authority/authorities/security.js +0 -228
- package/bin/runners/lib/authority/index.js +0 -293
- package/bin/runners/lib/bundle/bundle-intelligence.js +0 -846
- package/bin/runners/lib/cli-charts.js +0 -368
- package/bin/runners/lib/cli-config-display.js +0 -405
- package/bin/runners/lib/cli-demo.js +0 -275
- package/bin/runners/lib/cli-errors.js +0 -438
- package/bin/runners/lib/cli-help-formatter.js +0 -439
- package/bin/runners/lib/cli-interactive-menu.js +0 -509
- package/bin/runners/lib/cli-prompts.js +0 -441
- package/bin/runners/lib/cli-scan-cards.js +0 -362
- package/bin/runners/lib/compliance-reporter.js +0 -710
- package/bin/runners/lib/conductor/index.js +0 -671
- package/bin/runners/lib/easy/README.md +0 -123
- package/bin/runners/lib/easy/index.js +0 -140
- package/bin/runners/lib/easy/interactive-wizard.js +0 -788
- package/bin/runners/lib/easy/one-click-firewall.js +0 -564
- package/bin/runners/lib/easy/zero-config-reality.js +0 -714
- package/bin/runners/lib/engines/async-patterns-engine.js +0 -444
- package/bin/runners/lib/engines/bundle-size-engine.js +0 -433
- package/bin/runners/lib/engines/confidence-scoring.js +0 -276
- package/bin/runners/lib/engines/context-detection.js +0 -264
- package/bin/runners/lib/engines/database-patterns-engine.js +0 -429
- package/bin/runners/lib/engines/duplicate-code-engine.js +0 -354
- package/bin/runners/lib/engines/env-variables-engine.js +0 -458
- package/bin/runners/lib/engines/error-handling-engine.js +0 -437
- package/bin/runners/lib/engines/false-positive-prevention.js +0 -630
- package/bin/runners/lib/engines/framework-adapters/index.js +0 -607
- package/bin/runners/lib/engines/framework-detection.js +0 -508
- package/bin/runners/lib/engines/import-order-engine.js +0 -429
- package/bin/runners/lib/engines/naming-conventions-engine.js +0 -544
- package/bin/runners/lib/engines/noise-reduction-engine.js +0 -452
- package/bin/runners/lib/engines/orchestrator.js +0 -334
- package/bin/runners/lib/engines/react-patterns-engine.js +0 -457
- package/bin/runners/lib/engines/vibecheck-engines/lib/ai-hallucination-engine.js +0 -806
- package/bin/runners/lib/engines/vibecheck-engines/lib/smart-fix-engine.js +0 -577
- package/bin/runners/lib/engines/vibecheck-engines/lib/vibe-score-engine.js +0 -543
- package/bin/runners/lib/engines/vibecheck-engines.js +0 -514
- package/bin/runners/lib/enhanced-features/index.js +0 -305
- package/bin/runners/lib/enhanced-output.js +0 -631
- package/bin/runners/lib/enterprise.js +0 -300
- package/bin/runners/lib/firewall/command-validator.js +0 -351
- package/bin/runners/lib/firewall/config.js +0 -341
- package/bin/runners/lib/firewall/content-validator.js +0 -519
- package/bin/runners/lib/firewall/index.js +0 -101
- package/bin/runners/lib/firewall/path-validator.js +0 -256
- package/bin/runners/lib/intelligence/cross-repo-intelligence.js +0 -817
- package/bin/runners/lib/mcp-utils.js +0 -425
- package/bin/runners/lib/output/index.js +0 -1022
- package/bin/runners/lib/policy-engine.js +0 -652
- package/bin/runners/lib/polish/autofix/accessibility-fixes.js +0 -333
- package/bin/runners/lib/polish/autofix/async-handlers.js +0 -273
- package/bin/runners/lib/polish/autofix/dead-code.js +0 -280
- package/bin/runners/lib/polish/autofix/imports-optimizer.js +0 -344
- package/bin/runners/lib/polish/autofix/index.js +0 -200
- package/bin/runners/lib/polish/autofix/remove-consoles.js +0 -209
- package/bin/runners/lib/polish/autofix/strengthen-types.js +0 -245
- package/bin/runners/lib/polish/backend-checks.js +0 -148
- package/bin/runners/lib/polish/documentation-checks.js +0 -111
- package/bin/runners/lib/polish/frontend-checks.js +0 -168
- package/bin/runners/lib/polish/index.js +0 -71
- package/bin/runners/lib/polish/infrastructure-checks.js +0 -131
- package/bin/runners/lib/polish/library-detection.js +0 -175
- package/bin/runners/lib/polish/performance-checks.js +0 -100
- package/bin/runners/lib/polish/security-checks.js +0 -148
- package/bin/runners/lib/polish/utils.js +0 -203
- package/bin/runners/lib/prompt-builder.js +0 -540
- package/bin/runners/lib/proof-certificate.js +0 -634
- package/bin/runners/lib/reality/accessibility-audit.js +0 -946
- package/bin/runners/lib/reality/api-contract-validator.js +0 -1012
- package/bin/runners/lib/reality/chaos-engineering.js +0 -1084
- package/bin/runners/lib/reality/performance-tracker.js +0 -1077
- package/bin/runners/lib/reality/scenario-generator.js +0 -1404
- package/bin/runners/lib/reality/visual-regression.js +0 -852
- package/bin/runners/lib/reality-profiler.js +0 -717
- package/bin/runners/lib/replay/flight-recorder-viewer.js +0 -1160
- package/bin/runners/lib/review/ai-code-review.js +0 -832
- package/bin/runners/lib/rules/custom-rule-engine.js +0 -985
- package/bin/runners/lib/sbom-generator.js +0 -641
- package/bin/runners/lib/scan-output-enhanced.js +0 -512
- package/bin/runners/lib/security/owasp-scanner.js +0 -939
- package/bin/runners/lib/validators/contract-validator.js +0 -283
- package/bin/runners/lib/validators/dead-export-detector.js +0 -279
- package/bin/runners/lib/validators/dep-audit.js +0 -245
- package/bin/runners/lib/validators/env-validator.js +0 -319
- package/bin/runners/lib/validators/index.js +0 -120
- package/bin/runners/lib/validators/license-checker.js +0 -252
- package/bin/runners/lib/validators/route-validator.js +0 -290
- package/bin/runners/runAuthority.js +0 -528
- package/bin/runners/runConductor.js +0 -772
- package/bin/runners/runContainer.js +0 -366
- package/bin/runners/runEasy.js +0 -410
- package/bin/runners/runIaC.js +0 -372
- package/bin/runners/runVibe.js +0 -791
- package/mcp-server/tools.js +0 -495
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path Validator
|
|
3
|
-
*
|
|
4
|
-
* Validates file paths against:
|
|
5
|
-
* - Forbidden paths (secrets, configs, credentials)
|
|
6
|
-
* - Allowed paths (source directories)
|
|
7
|
-
* - Scope violations (writing outside allowed areas)
|
|
8
|
-
*
|
|
9
|
-
* Uses glob pattern matching for flexible path rules.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
"use strict";
|
|
13
|
-
|
|
14
|
-
const path = require("path");
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* PathValidator class for validating file paths
|
|
18
|
-
*/
|
|
19
|
-
class PathValidator {
|
|
20
|
-
/**
|
|
21
|
-
* Create a path validator
|
|
22
|
-
* @param {object} config - Firewall configuration
|
|
23
|
-
*/
|
|
24
|
-
constructor(config) {
|
|
25
|
-
this.config = config;
|
|
26
|
-
|
|
27
|
-
// Extract path configuration
|
|
28
|
-
const paths = config.paths || {};
|
|
29
|
-
this.forbiddenPaths = paths.forbidden || [];
|
|
30
|
-
this.allowedPaths = paths.allowed || [];
|
|
31
|
-
this.enforceAllowList = paths.enforceAllowList || false;
|
|
32
|
-
|
|
33
|
-
// Compile patterns for performance
|
|
34
|
-
this.forbiddenPatterns = this.forbiddenPaths.map(p => this.compilePattern(p));
|
|
35
|
-
this.allowedPatterns = this.allowedPaths.map(p => this.compilePattern(p));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Compile a glob pattern to regex
|
|
40
|
-
* @param {string} pattern - Glob pattern
|
|
41
|
-
* @returns {RegExp} Compiled regex
|
|
42
|
-
*/
|
|
43
|
-
compilePattern(pattern) {
|
|
44
|
-
// Escape special regex characters except glob wildcards
|
|
45
|
-
let regex = pattern
|
|
46
|
-
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
47
|
-
.replace(/\*\*/g, '{{GLOBSTAR}}')
|
|
48
|
-
.replace(/\*/g, '[^/]*')
|
|
49
|
-
.replace(/{{GLOBSTAR}}/g, '.*')
|
|
50
|
-
.replace(/\?/g, '.');
|
|
51
|
-
|
|
52
|
-
return new RegExp(`^${regex}$`, 'i');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Check if path matches a pattern
|
|
57
|
-
* @param {string} filePath - Path to check
|
|
58
|
-
* @param {string} pattern - Glob pattern
|
|
59
|
-
* @returns {boolean} True if matches
|
|
60
|
-
*/
|
|
61
|
-
matches(filePath, pattern) {
|
|
62
|
-
const regex = this.compilePattern(pattern);
|
|
63
|
-
|
|
64
|
-
// Normalize path separators
|
|
65
|
-
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
66
|
-
|
|
67
|
-
// Check both full path and basename
|
|
68
|
-
return regex.test(normalizedPath) || regex.test(path.basename(normalizedPath));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Check if path matches any pattern in list
|
|
73
|
-
* @param {string} filePath - Path to check
|
|
74
|
-
* @param {string[]} patterns - List of patterns
|
|
75
|
-
* @returns {string|null} Matching pattern or null
|
|
76
|
-
*/
|
|
77
|
-
matchesAny(filePath, patterns) {
|
|
78
|
-
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
79
|
-
|
|
80
|
-
for (const pattern of patterns) {
|
|
81
|
-
if (this.matches(normalizedPath, pattern)) {
|
|
82
|
-
return pattern;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Validate a file path
|
|
91
|
-
* @param {object} params - Validation parameters
|
|
92
|
-
* @param {string} params.action - Action type (write, delete, execute)
|
|
93
|
-
* @param {string} params.path - File path to validate
|
|
94
|
-
* @returns {object} Validation result
|
|
95
|
-
*/
|
|
96
|
-
validate({ action, path: filePath }) {
|
|
97
|
-
// Skip if no path provided
|
|
98
|
-
if (!filePath) {
|
|
99
|
-
return { valid: true };
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Normalize path
|
|
103
|
-
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
104
|
-
|
|
105
|
-
// Check forbidden paths
|
|
106
|
-
const forbiddenMatch = this.matchesAny(normalizedPath, this.forbiddenPaths);
|
|
107
|
-
if (forbiddenMatch) {
|
|
108
|
-
return {
|
|
109
|
-
valid: false,
|
|
110
|
-
rule: "forbidden-path",
|
|
111
|
-
severity: "critical",
|
|
112
|
-
message: `Path "${filePath}" matches forbidden pattern "${forbiddenMatch}"`,
|
|
113
|
-
details: {
|
|
114
|
-
path: filePath,
|
|
115
|
-
pattern: forbiddenMatch,
|
|
116
|
-
reason: this.getForbiddenReason(forbiddenMatch),
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Check allowed paths if enforcing allow list
|
|
122
|
-
if (this.enforceAllowList && this.allowedPaths.length > 0) {
|
|
123
|
-
const allowedMatch = this.matchesAny(normalizedPath, this.allowedPaths);
|
|
124
|
-
if (!allowedMatch) {
|
|
125
|
-
return {
|
|
126
|
-
valid: false,
|
|
127
|
-
rule: "scope-violation",
|
|
128
|
-
severity: "high",
|
|
129
|
-
message: `Path "${filePath}" is outside allowed scope`,
|
|
130
|
-
details: {
|
|
131
|
-
path: filePath,
|
|
132
|
-
allowedPaths: this.allowedPaths,
|
|
133
|
-
suggestion: "Add the path to 'paths.allowed' in firewall config or move file to allowed directory",
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Check for sensitive patterns even if not in forbidden list
|
|
140
|
-
const sensitiveCheck = this.checkSensitivePatterns(normalizedPath);
|
|
141
|
-
if (sensitiveCheck) {
|
|
142
|
-
return sensitiveCheck;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return { valid: true };
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Get reason why a path is forbidden
|
|
150
|
-
* @param {string} pattern - Forbidden pattern
|
|
151
|
-
* @returns {string} Human-readable reason
|
|
152
|
-
*/
|
|
153
|
-
getForbiddenReason(pattern) {
|
|
154
|
-
const reasons = {
|
|
155
|
-
".env": "Environment files may contain secrets",
|
|
156
|
-
".env.*": "Environment files may contain secrets",
|
|
157
|
-
"*.pem": "Certificate files are sensitive",
|
|
158
|
-
"*.key": "Private key files are sensitive",
|
|
159
|
-
"secrets/**": "Secrets directory is protected",
|
|
160
|
-
".git/**": "Git internals should not be modified",
|
|
161
|
-
"package-lock.json": "Lock files should be managed by package manager",
|
|
162
|
-
"config/production.*": "Production config may contain secrets",
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
for (const [key, reason] of Object.entries(reasons)) {
|
|
166
|
-
if (pattern.includes(key) || key.includes(pattern)) {
|
|
167
|
-
return reason;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return "Path matches forbidden pattern";
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Check for sensitive patterns that might indicate credentials
|
|
176
|
-
* @param {string} filePath - Path to check
|
|
177
|
-
* @returns {object|null} Violation if found
|
|
178
|
-
*/
|
|
179
|
-
checkSensitivePatterns(filePath) {
|
|
180
|
-
const sensitivePatterns = [
|
|
181
|
-
{ pattern: /credentials?/i, name: "credentials" },
|
|
182
|
-
{ pattern: /secrets?/i, name: "secrets" },
|
|
183
|
-
{ pattern: /password/i, name: "password" },
|
|
184
|
-
{ pattern: /private.*key/i, name: "private-key" },
|
|
185
|
-
{ pattern: /\.pem$/i, name: "certificate" },
|
|
186
|
-
{ pattern: /\.p12$/i, name: "certificate" },
|
|
187
|
-
{ pattern: /\.pfx$/i, name: "certificate" },
|
|
188
|
-
{ pattern: /id_rsa/i, name: "ssh-key" },
|
|
189
|
-
{ pattern: /id_ed25519/i, name: "ssh-key" },
|
|
190
|
-
];
|
|
191
|
-
|
|
192
|
-
for (const { pattern, name } of sensitivePatterns) {
|
|
193
|
-
if (pattern.test(filePath)) {
|
|
194
|
-
// Check if this is explicitly allowed
|
|
195
|
-
const isAllowed = this.allowedPaths.some(p => this.matches(filePath, p));
|
|
196
|
-
if (!isAllowed) {
|
|
197
|
-
return {
|
|
198
|
-
valid: false,
|
|
199
|
-
rule: "sensitive-path",
|
|
200
|
-
severity: "high",
|
|
201
|
-
message: `Path "${filePath}" appears to contain sensitive data (${name})`,
|
|
202
|
-
details: {
|
|
203
|
-
path: filePath,
|
|
204
|
-
sensitiveType: name,
|
|
205
|
-
suggestion: "If this is intentional, add the path to 'paths.allowed' in firewall config",
|
|
206
|
-
},
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Batch validate multiple paths
|
|
217
|
-
* @param {string[]} paths - Paths to validate
|
|
218
|
-
* @returns {object[]} Validation results
|
|
219
|
-
*/
|
|
220
|
-
validateBatch(paths) {
|
|
221
|
-
return paths.map(p => ({
|
|
222
|
-
path: p,
|
|
223
|
-
...this.validate({ path: p }),
|
|
224
|
-
}));
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Get all forbidden paths
|
|
229
|
-
* @returns {string[]} Forbidden paths
|
|
230
|
-
*/
|
|
231
|
-
getForbiddenPaths() {
|
|
232
|
-
return [...this.forbiddenPaths];
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Get all allowed paths
|
|
237
|
-
* @returns {string[]} Allowed paths
|
|
238
|
-
*/
|
|
239
|
-
getAllowedPaths() {
|
|
240
|
-
return [...this.allowedPaths];
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Check if path is in a protected directory
|
|
245
|
-
* @param {string} filePath - Path to check
|
|
246
|
-
* @returns {boolean} True if protected
|
|
247
|
-
*/
|
|
248
|
-
isProtected(filePath) {
|
|
249
|
-
const result = this.validate({ path: filePath });
|
|
250
|
-
return !result.valid;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
module.exports = {
|
|
255
|
-
PathValidator,
|
|
256
|
-
};
|