Remove unnecessary file safety measures

This commit is contained in:
Reece Browne 2025-09-03 23:37:19 +01:00
parent a571288f8f
commit 706cfc5400
4 changed files with 3 additions and 69 deletions

View File

@ -14,7 +14,7 @@ import "./styles/cookieconsent.css";
import "./index.css";
import { RightRailProvider } from "./contexts/RightRailContext";
// Import file ID safety validators (development only)
// Import file ID debugging helpers (development only)
import "./utils/fileIdSafety";
// Loading component for i18next suspense

View File

@ -124,7 +124,7 @@ function FileContextInner({
// Helper functions for pinned files
const consumeFilesWrapper = useCallback(async (inputFileIds: FileId[], outputFiles: File[]): Promise<FileId[]> => {
return consumeFiles(inputFileIds, outputFiles, stateRef, filesRef, dispatch, indexedDB);
return consumeFiles(inputFileIds, outputFiles, filesRef, dispatch, indexedDB);
}, [indexedDB]);
const undoConsumeFilesWrapper = useCallback(async (inputFiles: File[], inputWorkbenchFiles: WorkbenchFile[], outputFileIds: FileId[]): Promise<void> => {

View File

@ -24,10 +24,9 @@ declare global {
type RequireStirlingFile<T> = T extends File ? StirlingFile : T;
}
// Extend Window interface to add runtime validation helpers
// Extend Window interface for debugging
interface Window {
__FILE_ID_DEBUG?: boolean;
__validateFileId?: (id: string, context: string) => void;
}
}

View File

@ -11,69 +11,4 @@ export function isValidFileId(id: string): id is FileId {
return uuidRegex.test(id);
}
// Detect potentially dangerous file.name usage as ID
export function isDangerousFileNameAsId(fileName: string, context: string = ''): boolean {
// Check if it's definitely a UUID (safe)
if (isValidFileId(fileName)) {
return false;
}
// Check if it's a quickKey (safe) - format: name|size|lastModified
if (/^.+\|\d+\|\d+$/.test(fileName)) {
return false; // quickKeys are legitimate, not dangerous
}
// Common patterns that suggest file.name is being used as ID
const dangerousPatterns = [
/^[^-]+-page-\d+$/, // pattern: filename-page-123
/\.(pdf|jpg|png|doc|docx)$/i, // ends with file extension
/\s/, // contains whitespace (filenames often have spaces)
/[()[\]{}]/, // contains brackets/parentheses common in filenames
/['"]/, // contains quotes
/[^a-zA-Z0-9\-._]/ // contains special characters not in UUIDs
];
// Check dangerous patterns
const isDangerous = dangerousPatterns.some(pattern => pattern.test(fileName));
if (isDangerous && context) {
console.warn(`⚠️ Potentially dangerous file.name usage detected in ${context}: "${fileName}"`);
}
return isDangerous;
}
// Runtime validation for FileId usage in development
export function validateFileId(id: string, context: string): void {
if (process.env.NODE_ENV === 'development') {
// Check if it looks like a dangerous file.name usage
if (isDangerousFileNameAsId(id, context)) {
console.error(`💀 DANGEROUS: file.name used as FileId in ${context}! This will cause ID collisions.`);
console.trace('Stack trace:');
}
}
}
// Runtime validation for File vs FileWithId usage
export function validateFileWithId(file: File, context: string): void {
// Check if file has embedded fileId
if (!('fileId' in file)) {
console.warn(`⚠️ Regular File object used where FileWithId expected in ${context}: "${file.name}"`);
console.warn('Consider using FileWithId for better type safety');
}
}
// Assertion for FileId validation (throws in development)
export function assertValidFileId(id: string, context: string): void {
if (process.env.NODE_ENV === 'development') {
if (isDangerousFileNameAsId(id, context)) {
throw new Error(`ASSERTION FAILED: Dangerous file.name as FileId detected in ${context}: "${id}"`);
}
}
}
// Global debug helpers (can be enabled in dev tools)
if (typeof window !== 'undefined') {
window.__FILE_ID_DEBUG = process.env.NODE_ENV === 'development';
window.__validateFileId = validateFileId;
}