import { sanitizeHtml, sanitizeSvg, sanitizeText, sanitizeUrl, validateImportedDrawing, sanitizeDrawingData, } from "./security"; console.log("Starting Security Test Suite...\n"); console.log("Test 1: HTML/JS Sanitization"); const maliciousHtml = ` Normal text content `; const sanitizedHtml = sanitizeHtml(maliciousHtml); console.log("PASS: Original:", maliciousHtml.substring(0, 100) + "..."); console.log("PASS: Sanitized:", sanitizedHtml.substring(0, 100) + "..."); console.log("PASS: Script tags removed:", !sanitizedHtml.includes(" `; const sanitizedSvg = sanitizeSvg(maliciousSvg); console.log("PASS: Original:", maliciousSvg.substring(0, 100) + "..."); console.log("PASS: Sanitized:", sanitizedSvg.substring(0, 100) + "..."); console.log("PASS: SVG scripts removed:", !sanitizedSvg.includes("", "vbscript:msgbox('XSS')", "https://example.com", "/relative/path", "./current/path", "../parent/path", "mailto:test@example.com", ]; maliciousUrls.forEach((url) => { const sanitized = sanitizeUrl(url); const isSafe = sanitized !== ""; console.log( `PASS: "${url}" -> "${sanitized}" (${isSafe ? "SAFE" : "BLOCKED"})` ); }); console.log(""); console.log("Test 4: Text Sanitization with Length Limits"); const longText = "A".repeat(2000); const sanitizedLongText = sanitizeText(longText, 500); console.log( `PASS: Long text truncated: ${longText.length} -> ${sanitizedLongText.length} chars` ); const maliciousText = "Normal text"; const sanitizedText = sanitizeText(maliciousText); console.log(`PASS: Text sanitized: "${maliciousText}" -> "${sanitizedText}"`); console.log( "PASS: Malicious content removed:", !sanitizedText.includes("Malicious text", }, { id: "test2", type: "rectangle", x: 10, y: 10, width: 100, height: 100, angle: 0, version: 1, versionNonce: 1, link: "javascript:alert('XSS')", }, ], appState: { viewBackgroundColor: "", }, files: null, preview: '', }; console.log("Testing malicious drawing validation..."); const isValidDrawing = validateImportedDrawing(maliciousDrawing); console.log(`PASS: Malicious drawing rejected: ${!isValidDrawing}`); try { const sanitizedDrawing = sanitizeDrawingData(maliciousDrawing); console.log("PASS: Sanitization successful"); console.log(`PASS: Text sanitized: ${sanitizedDrawing.elements[0].text}`); console.log( `PASS: Link sanitized: ${sanitizedDrawing.elements[1].link || "null"}` ); console.log( `PASS: SVG sanitized: ${!sanitizedDrawing.preview?.includes("