document.addEventListener('DOMContentLoaded', function () { constcodeInput = document.getElementById('codeInput'); const promptInput = document.getElementById('promptInput'); const scanButton = document.getElementById('scanButton'); const scanForm = document.getElementById('scanForm'); const loader = document.getElementById('loader'); const resultsSection = document.getElementById('resultsSection'); const riskScoreValue = document.getElementById('riskScoreValue'); const riskScoreChart = document.getElementById('riskScoreChart'); const issuesContainer = document.getElementById('issuesContainer'); const detectionResult = document.getElementById('detectionResult'); const detectedLanguage = document.getElementById('detectedLanguage'); const detectionSuggestion = document.getElementById('detectionSuggestion'); function debounce(func, delay) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), delay); }; } const handleCodeInputChange = debounce(async () => { const code = codeInput.value.trim(); if (code.length < 10) { // Don't run for very short inputs detectionResult.style.display = 'none'; return; } try { const response = await fetch('/api/detect-type.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ code: code }) }); if (response.ok) { const data = await response.json(); if (data.language && data.language !== 'Text') { detectedLanguage.textContent = data.language; detectionSuggestion.textContent = data.suggestion; detectionResult.style.display = 'block'; } else { detectionResult.style.display = 'none'; } } } catch (error) { console.error('Error detecting language:', error); detectionResult.style.display = 'none'; } }, 500); // 500ms delay codeInput.addEventListener('input', handleCodeInputChange); function validateInputs() { const code = codeInput.value.trim(); const prompt = promptInput.value.trim(); scanButton.disabled = !(code && prompt); } codeInput.addEventListener('input', validateInputs); promptInput.addEventListener('input', validateInputs); scanForm.addEventListener('submit', function (e) { e.preventDefault(); document.querySelector('.scan-section').style.display = 'none'; loader.style.display = 'block'; // Simulate API call setTimeout(() => { loader.style.display = 'none'; displayMockResults(); }, 3000); }); function displayMockResults() { const mockData = { "risk_score": 78, "issues": [ { "type": "SQL Injection", "severity": "Critical", "location": "Login form, 'username' parameter", "explanation": "Your script appears to be vulnerable to SQL Injection because it doesn't properly sanitize user input before including it in a database query.", "fix": "Use prepared statements and parameterized queries. Example in PHP: $stmt = $pdo->prepare('SELECT * FROM users WHERE username = ?'); $stmt->execute([$username]);" }, { "type": "Cross-Site Scripting (XSS)", "severity": "High", "location": "Search results page", "explanation": "The search term is reflected back to the page without being sanitized, allowing an attacker to inject malicious scripts.", "fix": "Always escape HTML output. In PHP, use: echo htmlspecialchars($searchTerm, ENT_QUOTES, 'UTF-8');" }, { "type": "Weak Password Policy", "severity": "Medium", "location": "User registration script", "explanation": "The script does not enforce a strong password policy, making user accounts susceptible to brute-force attacks.", "fix": "Require passwords to be at least 12 characters long and include a mix of uppercase, lowercase, numbers, and symbols." } ] }; riskScoreValue.textContent = mockData.risk_score; updateRiskChart(mockData.risk_score); issuesContainer.innerHTML = ''; mockData.issues.forEach(issue => { const severityClass = `badge-${issue.severity.toLowerCase()}`; const issueHtml = `
${issue.explanation}
${issue.fix}