diff --git a/static/js/pages/bgp-route.js b/static/js/pages/bgp-route.js new file mode 100644 index 0000000..2d99cc5 --- /dev/null +++ b/static/js/pages/bgp-route.js @@ -0,0 +1,95 @@ +function detectIpVersion(ip){ + const ipv4Regex=/^(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?$/; + const ipv6Regex=/^([0-9a-fA-F:]+)(\/\d{1,3})?$/; + + if(ipv4Regex.test(ip)){ + return"ipv4"; + }else if(ipv6Regex.test(ip)){ + return"ipv6"; + }else{ + return null; + } +} + +function highlightBGPOutput(text){ + text=text.replace(/\b215085\b/g,'215085'); + + text=text.replace(/\b\d{4,6}\b/g,match=>{ + if(match==='215085')return match; + return`${match}`; + }); + + text=text.split('\n').map(line=>{ + if(line.toLowerCase().includes('best')){ + return`${line}`; + } + return line; + }).join('\n'); + + text=text.split('\n').map(line=>{ + if(line.toLowerCase().includes('table entry')){ + return`${line}`; + } + return line; + }).join('\n'); + + text=text.split('\n').map(line=>{ + if(line.toLowerCase().includes('multipath')){ + return`${line}`; + } + return line; + }).join('\n'); + + return text.replace(/\n/g,'
'); +} + +function displayBGPRoute(data){ + const outputElem=document.getElementById("bgpOutput"); + const rawText=data.data||JSON.stringify(data,null,2); + const highlighted=highlightBGPOutput(rawText); + outputElem.innerHTML=highlighted; +} + +async function loadBGPRoute(){ + const outputElem=document.getElementById("bgpOutput"); + const prefix=document.getElementById("prefixInput").value.trim(); + + if(!prefix){ + outputElem.textContent="Voer eerst een geldig prefix in."; + return; + } + + const ip_version=detectIpVersion(prefix); + if(!ip_version){ + outputElem.textContent="Ongeldig IP-adres of prefix."; + return; + } + + outputElem.textContent="Loading..."; + + const postData={ + ip_version:ip_version, + bgprouteprefix:prefix + }; + + try{ + const response=await fetch("/bgp-route/lookup",{ + method:"POST", + headers:{ + "Content-Type":"application/json", + }, + body:JSON.stringify(postData), + }); + if(!response.ok)throw new Error("Network response was not ok"); + const data=await response.json(); + + if(data.error){ + outputElem.textContent="Error: "+data.error; + return; + } + + displayBGPRoute(data); + }catch(error){ + outputElem.textContent="Fout bij ophalen van data: "+error.message; + } +}