// DNSSEC Check - Popup Logic const container = document.getElementById('container'); const domainEl = document.getElementById('domain'); const statusEl = document.getElementById('status'); const descriptionEl = document.getElementById('description'); const shieldSymbol = document.getElementById('shield-symbol'); const recheckBtn = document.getElementById('recheck-btn'); const SVG_CHECK = ` `; const SVG_X = ` `; const SVG_QUESTION = ` ? `; function setShield(state) { container.className = 'container'; container.classList.add(`shield-${state}`); if (state === 'green') shieldSymbol.innerHTML = SVG_CHECK; else if (state === 'red') shieldSymbol.innerHTML = SVG_X; else shieldSymbol.innerHTML = SVG_QUESTION; } function showStatus(result) { if (!result || result.error) { setShield('gray'); domainEl.textContent = result?.domain || 'Onbekend'; statusEl.textContent = 'Kon niet controleren'; statusEl.className = 'status unknown'; descriptionEl.textContent = result?.error ? `Fout: ${result.error}` : 'Geen informatie beschikbaar voor deze pagina.'; return; } domainEl.textContent = result.domain; if (result.dnssec) { setShield('green'); statusEl.textContent = 'DNSSEC Beveiligd'; statusEl.className = 'status secure'; descriptionEl.textContent = 'Deze website gebruikt DNSSEC. DNS-antwoorden zijn cryptografisch geverifieerd, wat beschermt tegen DNS-spoofing en manipulatie.'; } else { setShield('red'); statusEl.textContent = 'Geen DNSSEC'; statusEl.className = 'status insecure'; descriptionEl.textContent = 'Deze website gebruikt geen DNSSEC. DNS-antwoorden worden niet cryptografisch geverifieerd, waardoor ze kwetsbaar kunnen zijn voor manipulatie.'; } } function showNoWeb() { setShield('gray'); domainEl.textContent = 'Geen website'; statusEl.textContent = 'Niet beschikbaar'; statusEl.className = 'status unknown'; descriptionEl.textContent = 'DNSSEC-controle is alleen beschikbaar op HTTP/HTTPS websites.'; recheckBtn.style.display = 'none'; } // Get current tab and fetch status chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const tab = tabs[0]; if (!tab) { showNoWeb(); return; } try { const url = new URL(tab.url); if (url.protocol !== 'http:' && url.protocol !== 'https:') { showNoWeb(); return; } } catch { showNoWeb(); return; } chrome.runtime.sendMessage( { type: 'getStatus', tabId: tab.id }, (result) => { if (result) { showStatus(result); } else { domainEl.textContent = new URL(tab.url).hostname; setShield('gray'); statusEl.textContent = 'Controleren...'; statusEl.className = 'status unknown'; descriptionEl.textContent = 'Even geduld, DNSSEC wordt gecontroleerd.'; // Wait and retry setTimeout(() => { chrome.runtime.sendMessage( { type: 'getStatus', tabId: tab.id }, (r) => showStatus(r) ); }, 2000); } } ); // Recheck button recheckBtn.addEventListener('click', () => { recheckBtn.classList.add('loading'); recheckBtn.disabled = true; setShield('gray'); statusEl.textContent = 'Controleren...'; statusEl.className = 'status unknown'; descriptionEl.textContent = 'Opnieuw controleren...'; chrome.runtime.sendMessage( { type: 'recheck', tabId: tab.id }, (result) => { recheckBtn.classList.remove('loading'); recheckBtn.disabled = false; showStatus(result); } ); }); });