From d584e11453281c40b8eeec9c78ecbb55c4950e4f Mon Sep 17 00:00:00 2001 From: MrUnknownDE Date: Wed, 14 Jan 2026 17:08:15 +0100 Subject: [PATCH] feat: add shareable links --- frontend/app/dns-lookup.js | 51 ++++++++++++++++++++++++++++++++++++++ frontend/app/script.js | 42 +++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/frontend/app/dns-lookup.js b/frontend/app/dns-lookup.js index a7b363d..34c8437 100644 --- a/frontend/app/dns-lookup.js +++ b/frontend/app/dns-lookup.js @@ -96,6 +96,35 @@ document.addEventListener('DOMContentLoaded', () => { } } + // --- URL Parameter Functions --- + + /** + * Updates the URL with DNS lookup parameters + * @param {string} domain - The domain name + * @param {string} type - The DNS record type + */ + function updateUrlParams(domain, type) { + const url = new URL(window.location); + url.searchParams.set('domain', domain); + url.searchParams.set('type', type); + window.history.pushState({}, '', url); + } + + /** + * Reads URL parameters and returns domain and type if present + * @returns {object|null} Object with domain and type, or null if not present + */ + function getUrlParams() { + const urlParams = new URLSearchParams(window.location.search); + const domain = urlParams.get('domain'); + const type = urlParams.get('type'); + + if (domain && type) { + return { domain, type }; + } + return null; + } + // --- DNS Lookup Specific Functions --- function displayDnsResults(data, outputEl) { if (!data.records || Object.keys(data.records).length === 0) { @@ -114,6 +143,10 @@ document.addEventListener('DOMContentLoaded', () => { dnsLookupErrorEl.classList.remove('hidden'); return; } + + // Update URL with parameters + updateUrlParams(domain, type); + fetchAndDisplay( '/dns-lookup', { domain, type }, @@ -126,6 +159,21 @@ document.addEventListener('DOMContentLoaded', () => { ); } + /** + * Executes DNS lookup from URL parameters if they exist + */ + function executeLookupFromUrl() { + const params = getUrlParams(); + if (params) { + // Populate the input fields + dnsDomainInput.value = params.domain; + dnsTypeSelect.value = params.type; + + // Trigger the lookup + handleDnsLookupClick(); + } + } + // --- Initial Load & Event Listeners --- fetchVersionInfo(); // Lade Versionsinfo für Footer @@ -134,4 +182,7 @@ document.addEventListener('DOMContentLoaded', () => { if (event.key === 'Enter') handleDnsLookupClick(); }); + // Execute lookup from URL parameters if present + executeLookupFromUrl(); + }); // End DOMContentLoaded \ No newline at end of file diff --git a/frontend/app/script.js b/frontend/app/script.js index b2202f4..3a131e1 100644 --- a/frontend/app/script.js +++ b/frontend/app/script.js @@ -328,6 +328,28 @@ document.addEventListener('DOMContentLoaded', () => { // --- Lookup Functions --- + // --- URL Parameter Functions --- + + /** + * Updates the URL with IP lookup parameter + * @param {string} ip - The IP address or domain to lookup + */ + function updateLookupUrlParams(ip) { + const url = new URL(window.location); + url.searchParams.set('ip', ip); + window.history.pushState({}, '', url); + } + + /** + * Reads URL parameters and returns IP if present + * @returns {string|null} IP or domain from URL, or null if not present + */ + function getLookupUrlParams() { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get('ip'); + } + + /** Zeigt Fehler im Lookup-Bereich an */ function showLookupError(message) { if (!lookupErrorEl) return; @@ -780,6 +802,9 @@ document.addEventListener('DOMContentLoaded', () => { resetLookupResults(); // Reset results before starting hideLookupError(); + // Update URL with the query parameter + updateLookupUrlParams(query); + if (isValidIpAddress(query)) { // Input is an IP address console.log(`Lookup button clicked for IP: ${query}`); @@ -829,6 +854,20 @@ document.addEventListener('DOMContentLoaded', () => { } } + /** + * Executes IP lookup from URL parameters if they exist + */ + function executeLookupFromUrl() { + const ipParam = getLookupUrlParams(); + if (ipParam && lookupIpInput) { + // Populate the input field + lookupIpInput.value = ipParam; + + // Trigger the lookup + handleLookupClick(); + } + } + // --- Initial Load & Event Listeners --- fetchIpInfo(); // Lade Infos zur eigenen IP fetchVersionInfo(); // Lade Versionsinfo für Footer @@ -845,4 +884,7 @@ document.addEventListener('DOMContentLoaded', () => { // Der Event Listener für den IP-Link wird jetzt in fetchIpInfo() hinzugefügt, // nachdem die IP erfolgreich abgerufen wurde. + // Execute lookup from URL parameters if present + executeLookupFromUrl(); + }); // End DOMContentLoaded \ No newline at end of file