// resources/js/Pages/Home.jsx import React, { useState } from 'react'; import '../../css/Home.css'; const DomainChecker = () => { const [input, setInput] = useState(''); const [error, setError] = useState(''); const [whoisData, setWhoisData] = useState(null); const [geoData, setGeoData] = useState(null); const [dnsResults, setDnsResults] = useState([]); const [portResults, setPortResults] = useState(null); const [sslData, setSslData] = useState(null); const [loading, setLoading] = useState(false); const [whoisLoading, setWhoisLoading] = useState(false); const [portLoading, setPortLoading] = useState(false); const [sslLoading, setSslLoading] = useState(false); const [recordType, setRecordType] = useState('A'); const [selectedPorts, setSelectedPorts] = useState([]); const [customPort, setCustomPort] = useState(''); const defaultPorts = [ 21, 22, 25, 53, 80, 110, 143, 443, 465, 587, 8080, 3306, 3389 ]; const validateDomain = d => { const re = /^(?!:\/\/)(?=.{1,253}$)(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,})$/; return re.test(d); }; const isIPv4 = ip => { const re = /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/; return re.test(ip); }; const togglePort = port => { setSelectedPorts(prev => prev.includes(port) ? prev.filter(p => p !== port) : [...prev, port] ); }; const addCustomPort = () => { const p = parseInt(customPort, 10); if (!isNaN(p) && p > 0 && p < 65536 && !selectedPorts.includes(p)) { setSelectedPorts(prev => [...prev, p]); setCustomPort(''); } else { setError('Enter a valid port (1β65535) not already selected.'); } }; const handleCheck = async () => { setError(''); setWhoisData(null); setGeoData(null); setDnsResults([]); setPortResults(null); setSslData(null); const ipMode = isIPv4(input); const domMode = validateDomain(input); if (!ipMode && !domMode) { setError('Invalid input. Enter a valid domain or IPv4 address.'); return; } setLoading(true); try { if (ipMode) { // GeoIP first const geoRes = await fetch(`/api/geoip?ip=${encodeURIComponent(input)}`); const geoJson = await geoRes.json(); if (!geoRes.ok) throw new Error(geoJson.error || 'IP lookup failed'); setGeoData(geoJson); // Then ports if (selectedPorts.length) { setPortLoading(true); const portRes = await fetch('/api/portcheck', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ip: input, ports: selectedPorts }) }); const portJson = await portRes.json(); if (!portRes.ok) throw new Error(portJson.error || 'Port check failed'); setPortResults(portJson.results); } else { setPortResults({}); } } else { // Domain β DNS const dnsRes = await fetch( `/api/dns-propagation?domain=${encodeURIComponent(input)}&type=${recordType}` ); const dnsJson = await dnsRes.json(); if (!dnsRes.ok) throw new Error(dnsJson.error || 'DNS lookup failed'); setDnsResults(dnsJson); // then SSL check try { setSslLoading(true); const sslRes = await fetch(`/api/ssl-check?domain=${encodeURIComponent(input)}`); const sslJson = await sslRes.json(); if (!sslRes.ok) throw new Error(sslJson.error || 'SSL check failed'); setSslData(sslJson); } catch (e) { setError(e.message); } finally { setSslLoading(false); } } } catch (e) { setError(e.message); } finally { setLoading(false); setPortLoading(false); } }; const handleWhoisCheck = async () => { setError(''); setWhoisLoading(true); setWhoisData(null); try { const res = await fetch(`/api/whois?domain=${encodeURIComponent(input)}`); const json = await res.json(); if (!res.ok) throw new Error(json.error || 'WHOIS lookup failed'); setWhoisData(json); } catch (e) { setError(e.message); } finally { setWhoisLoading(false); } }; const getFlagUrl = code => `https://flagcdn.com/24x18/${code.toLowerCase()}.png`; return (
Check DNS propagation, WHOIS info, IP geolocation, or port status
{error}
} {loading &&Location:
{geoData.city_name}, {geoData.region_name}
{geoData.country_name}
Coordinates:
{geoData.latitude}, {geoData.longitude}
Timezone:
{geoData.time_zone}
ISP:
{geoData.as}
ASN:
AS{geoData.asn}
Issued To:
{sslData.result.issued_to}
Issuer:
{sslData.result.issuer_o} {sslData.result.issuer_cn}
Valid From:
{new Date(sslData.result.valid_from).toLocaleDateString()}
Expires On:
{new Date(sslData.result.valid_till).toLocaleDateString()}
Days Left:
{sslData.result.days_left}
Valid:
{sslData.result.cert_valid ? 'β
' : 'β'}
Registrar:
{whoisData.registrar?.name}
Created:
{new Date(whoisData.create_date).toLocaleDateString()}
Updated:
{new Date(whoisData.update_date).toLocaleDateString()}
Expires:
{new Date(whoisData.expire_date).toLocaleDateString()}
Nameservers: