in server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/toolShared.ts [61:103]
export function isPathApproved(filePath: string, approvedPaths?: Set<string>): boolean {
if (!approvedPaths || approvedPaths.size === 0) {
return false
}
// Normalize path separators for consistent comparison
const normalizedFilePath = filePath.replace(/\\\\/g, '/')
// Check if the exact path is approved (try both original and normalized)
if (approvedPaths.has(filePath) || approvedPaths.has(normalizedFilePath)) {
return true
}
// Get the root directory for traversal limits
const rootDir = path.parse(filePath).root.replace(/\\\\/g, '/')
// Check if any approved path is a parent of the file path using isParentFolder
for (const approvedPath of approvedPaths) {
const normalizedApprovedPath = approvedPath.replace(/\\\\/g, '/')
// Check using the isParentFolder utility
if (workspaceUtils.isParentFolder(normalizedApprovedPath, normalizedFilePath)) {
return true
}
// Also check with trailing slash variations to ensure consistency
if (normalizedApprovedPath.endsWith('/')) {
// Try without trailing slash
const withoutSlash = normalizedApprovedPath.slice(0, -1)
if (workspaceUtils.isParentFolder(withoutSlash, normalizedFilePath)) {
return true
}
} else {
// Try with trailing slash
const withSlash = normalizedApprovedPath + '/'
if (workspaceUtils.isParentFolder(withSlash, normalizedFilePath)) {
return true
}
}
}
return false
}