()
| 17803 | const resultsDiv = document.getElementById('blueborne-results'); |
| 17804 | const targetInput = document.getElementById('blueborne-target'); |
| 17805 | |
| 17806 | if (!btn || !resultsDiv || !targetInput) return; |
| 17807 | |
| 17808 | const target = targetInput.value.trim(); |
| 17809 | if (!target || !target.match(/^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/)) { |
| 17810 | resultsDiv.classList.remove('hidden'); |
| 17811 | resultsDiv.innerHTML = '<div class="text-red-400">✗ Invalid MAC address format</div>'; |
| 17812 | return; |
| 17813 | } |
| 17814 | |
| 17815 | const originalText = btn.textContent; |
| 17816 | btn.disabled = true; |
| 17817 | btn.textContent = 'Scanning...'; |
| 17818 | resultsDiv.classList.remove('hidden'); |
| 17819 | resultsDiv.textContent = `Scanning ${target} for BlueBorne...`; |
| 17820 | |
| 17821 | try { |
| 17822 | const response = await postAPI('/api/bluetooth/pentest/blueborne-scan', { target }); |
| 17823 | |
| 17824 | const vulnCount = response.vulnerabilities?.length || 0; |
| 17825 | const isVulnerable = response.vulnerable || false; |
| 17826 | |
| 17827 | resultsDiv.innerHTML = ` |
| 17828 | <div class="${isVulnerable ? 'text-red-400' : 'text-green-400'}"> |
| 17829 | ${isVulnerable ? '⚠ Potentially vulnerable' : '✓ No vulnerabilities detected'} |
| 17830 | </div> |
| 17831 | ${vulnCount > 0 ? `<div class="mt-1 text-xs">Found ${vulnCount} potential issue(s)</div>` : ''} |
| 17832 | `; |
| 17833 | addConsoleMessage(`BlueBorne scan of ${target} complete`, 'info'); |
| 17834 | updatePentestSummary('blueborne_scan', response); |
| 17835 | } catch (error) { |
| 17836 | console.error('BlueBorne scan error:', error); |
| 17837 | resultsDiv.innerHTML = `<div class="text-red-400">✗ Error: ${error.message}</div>`; |
nothing calls this directly
no test coverage detected