<?php
// ============================================================
//  ipcheck.tools – WHOIS Lookup
// ============================================================

require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../includes/functions.php';

$page_title   = 'WHOIS Lookup – Domain and IP Information';
$page_desc    = 'Free WHOIS Lookup: query registration data, nameservers and owner information for any domain or IP address on ipcheck.tools.';
$page_current = 'whois';

$query  = trim(strip_tags($_GET['domain'] ?? ''));
$result    = [];
$ip_result = [];
$error     = '';
$is_ip     = false;

if ($query) {
    // IP-Erkennung
    $clean_query = preg_replace('/^https?:\/\//i', '', trim($query));
    $clean_query = explode('/', $clean_query)[0];
    if (filter_var($clean_query, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
        $is_ip = true;
        $ip    = $clean_query;
        $rdap_ip_url = 'https://rdap.arin.net/registry/ip/' . urlencode($ip);
        $ch_ip = curl_init();
        curl_setopt_array($ch_ip, [
            CURLOPT_URL            => $rdap_ip_url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT        => 8,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_USERAGENT      => 'ipcheck.tools WHOIS/1.0',
            CURLOPT_HTTPHEADER     => ['Accept: application/rdap+json'],
        ]);
        $ip_json = curl_exec($ch_ip);
        curl_close($ch_ip);
        if ($ip_json) {
            $ip_data = json_decode($ip_json, true);
            if ($ip_data && isset($ip_data['handle'])) {
                // Organisation
                $org = '';
                $abuse_email = '';
                foreach ($ip_data['entities'] ?? [] as $entity) {
                    $roles = $entity['roles'] ?? [];
                    if (in_array('registrant', $roles) || in_array('administrative', $roles)) {
                        foreach ($entity['vcardArray'][1] ?? [] as $vcard) {
                            if (($vcard[0] ?? '') === 'fn') $org = $vcard[3] ?? '';
                        }
                    }
                    if (in_array('abuse', $roles)) {
                        foreach ($entity['vcardArray'][1] ?? [] as $vcard) {
                            if (($vcard[0] ?? '') === 'email') $abuse_email = $vcard[3] ?? '';
                        }
                    }
                }
                // Dates
                $registered = '';
                $updated    = '';
                foreach ($ip_data['events'] ?? [] as $ev) {
                    $d = isset($ev['eventDate']) ? date('d.m.Y', strtotime($ev['eventDate'])) : '';
                    if ($ev['eventAction'] === 'registration') $registered = $d;
                    if ($ev['eventAction'] === 'last changed')  $updated    = $d;
                }
                $ip_result = [
                    'ip'          => $ip,
                    'handle'      => $ip_data['handle'] ?? '–',
                    'name'        => $ip_data['name'] ?? '–',
                    'type'        => $ip_data['type'] ?? '–',
                    'country'     => $ip_data['country'] ?? '–',
                    'start_addr'  => $ip_data['startAddress'] ?? '–',
                    'end_addr'    => $ip_data['endAddress'] ?? '–',
                    'cidr'        => isset($ip_data['cidr0_cidrs'][0]) ? ($ip_data['cidr0_cidrs'][0]['v4prefix'] ?? $ip_data['cidr0_cidrs'][0]['v6prefix'] ?? '–') . '/' . ($ip_data['cidr0_cidrs'][0]['length'] ?? '') : '–',
                    'org'         => $org ?: '–',
                    'abuse_email' => $abuse_email,
                    'registered'  => $registered ?: '–',
                    'updated'     => $updated ?: '–',
                    'rdap_url'    => $rdap_ip_url,
                ];
            } else {
                $error = 'Keine WHOIS-Daten für <strong>' . h($ip) . '</strong> gefunden.';
            }
        } else {
            $error = 'IP-WHOIS-Abfrage fehlgeschlagen. Bitte versuche es später erneut.';
        }
    } else {
    // Domain bereinigen
    $domain = preg_replace('/^https?:\/\//i', '', $query);
    $domain = explode('/', $domain)[0];
    $domain = strtolower(rtrim($domain, '/'));

    if (!filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)) {
        $error = 'Ungültige Domain. Bitte eine gültige Domain eingeben (z.B. example.com).';
    } else {
        // WHOIS via IANA / RDAP API (JSON, kein externes exec nötig)
        $tld = strtolower(substr($domain, strrpos($domain, '.') + 1));
        // eu/at blockieren automatisierte Abfragen
        $blocked_tlds = ['eu', 'at'];
        if (in_array($tld, $blocked_tlds)) {
            $whois_links = ['eu' => 'https://whois.eurid.eu', 'at' => 'https://www.nic.at/whois'];
            $link = $whois_links[$tld];
            $error = 'WHOIS-Abfragen für <strong>.' . h($tld) . '</strong>-Domains sind leider nicht automatisiert möglich, da die Registry externe Abfragen blockiert. Bitte nutze direkt: <a href="' . $link . '" target="_blank" rel="nofollow">' . $link . '</a>';
        } else {
        $rdap_servers = ['de'=>'https://rdap.denic.de/domain/','com'=>'https://rdap.verisign.com/com/v1/domain/','net'=>'https://rdap.verisign.com/net/v1/domain/','org'=>'https://rdap.afilias.net/rdap/org/domain/','ch'=>'https://rdap.nic.ch/domain/','nl'=>'https://rdap.sidn.nl/domain/','fr'=>'https://rdap.nic.fr/domain/','uk'=>'https://rdap.nominet.uk/domain/','tools'=>'https://rdap.identitydigital.services/rdap/domain/','io'=>'https://rdap.nic.io/domain/','app'=>'https://rdap.nic.google/domain/','dev'=>'https://rdap.nic.google/domain/','shop'=>'https://rdap.nic.shop/domain/','online'=>'https://rdap.nic.online/domain/','site'=>'https://rdap.nic.site/domain/','tech'=>'https://rdap.nic.tech/domain/','gs'=>'https://rdap.nic.gs/domain/'];
        $rdap_base = $rdap_servers[$tld] ?? 'https://rdap.iana.org/domain/';
        $rdap_url = $rdap_base . urlencode($domain);
        $ch_curl = curl_init();
        curl_setopt_array($ch_curl, [
            CURLOPT_URL            => $rdap_url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT        => 8,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_USERAGENT      => 'ipcheck.tools WHOIS/1.0',
            CURLOPT_HTTPHEADER     => ['Accept: application/rdap+json'],
        ]);
        $json = curl_exec($ch_curl);
        curl_close($ch_curl);

        if ($json) {
            $data = json_decode($json, true);

            if ($data && isset($data['ldhName'])) {
                // Nameservers
                $nameservers = [];
                if (isset($data['nameservers'])) {
                    foreach ($data['nameservers'] as $ns) {
                        $nameservers[] = strtolower($ns['ldhName'] ?? '');
                    }
                }

                // Registrar aus entities
                $registrar    = '';
                $registrant   = '';
                $abuse_email  = '';
                if (isset($data['entities'])) {
                    foreach ($data['entities'] as $entity) {
                        $roles = $entity['roles'] ?? [];
                        if (in_array('registrar', $roles)) {
                            $registrar = $entity['vcardArray'][1][1][3] ?? ($entity['fn'] ?? '');
                            // Abuse-Kontakt
                            foreach ($entity['entities'] ?? [] as $sub) {
                                if (in_array('abuse', $sub['roles'] ?? [])) {
                                    foreach ($sub['vcardArray'][1] ?? [] as $vcard) {
                                        if (($vcard[0] ?? '') === 'email') {
                                            $abuse_email = $vcard[3] ?? '';
                                        }
                                    }
                                }
                            }
                        }
                        if (in_array('registrant', $roles)) {
                            $registrant = $entity['vcardArray'][1][1][3] ?? '';
                        }
                    }
                }

                // Datum aus events
                $created  = '';
                $updated  = '';
                $expires  = '';
                if (isset($data['events'])) {
                    foreach ($data['events'] as $event) {
                        $date = isset($event['eventDate'])
                            ? date('d.m.Y', strtotime($event['eventDate']))
                            : '';
                        switch ($event['eventAction'] ?? '') {
                            case 'registration': $created = $date; break;
                            case 'last changed':  $updated = $date; break;
                            case 'expiration':    $expires = $date; break;
                        }
                    }
                }

                // Status
                $statuses = [];
                if (isset($data['status'])) {
                    $statuses = is_array($data['status']) ? $data['status'] : [$data['status']];
                }

                // Ablauf in Tagen
                $days_left = '';
                if ($expires) {
                    $exp_ts    = strtotime(str_replace('.', '-', substr($expires, 6, 4) . '-' . substr($expires, 3, 2) . '-' . substr($expires, 0, 2)));
                    $days_left = (int)(($exp_ts - time()) / 86400);
                }

                $result = [
                    'domain'      => strtolower($data['ldhName'] ?? $domain),
                    'registrar'   => $registrar ?: '–',
                    'registrant'  => $registrant ?: 'DSGVO-geschützt',
                    'created'     => $created ?: '–',
                    'updated'     => $updated ?: '–',
                    'expires'     => $expires ?: '–',
                    'days_left'   => $days_left,
                    'nameservers' => $nameservers,
                    'statuses'    => $statuses,
                    'abuse_email' => $abuse_email,
                    'rdap_url'    => $rdap_url,
                ];
            } else {
                $error = 'Keine WHOIS-Daten gefunden für <strong>' . h($domain) . '</strong>. Die Domain ist möglicherweise nicht registriert.';
            }
        } else {
            $error = 'WHOIS-Abfrage fehlgeschlagen. Bitte versuche es später erneut.';
        }
        } // end else blocked_tlds
    }
    } // end else is_ip
}

require_once __DIR__ . '/header.php';
?>

<div class="hero">
  <div class="hero-label">Tool</div>
  <div class="hero-title">WHOIS Lookup</div>
  <div class="hero-sub">Domains, IPv4- und IPv6-Adressen nachschlagen</div>
  <form method="GET" action="/en/whois.php">
    <div class="input-group">
      <input class="input-text" type="text" name="domain"
             value="<?= h($query) ?>"
             placeholder="z.B. example.com, google.de oder 8.8.8.8"
             required />
      <button type="submit" class="btn btn-primary">
        <i class="ti ti-id"></i> WHOIS abfragen
      </button>
    </div>
  </form>
</div>

<div class="wrap">

  <div class="ad-slot">
    728×90 · Werbeplatz 1 – Header
    <small>Google AdSense</small>
  </div>

  <?php if ($error): ?>
    <div class="alert alert-warn">
      <i class="ti ti-alert-triangle"></i>
      <span><?= $error ?></span>
    </div>

  <?php elseif ($ip_result): ?>

    <div class="stat-grid">
      <div class="stat">
        <div class="stat-val mono blue" style="font-size:12px;"><?= h($ip_result['ip']) ?></div>
        <div class="stat-key">IP-Adresse</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="font-size:12px;"><?= h($ip_result['country']) ?></div>
        <div class="stat-key">Country</div>
      </div>
      <div class="stat">
        <div class="stat-val mono" style="font-size:12px;"><?= h($ip_result['cidr']) ?></div>
        <div class="stat-key">Network block</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="font-size:12px;"><?= h($ip_result['name']) ?></div>
        <div class="stat-key">Netzname</div>
      </div>
    </div>

    <div class="grid2">
      <div class="card card-blue">
        <div class="card-title"><i class="ti ti-network"></i> IP Information</div>
        <div class="data-row"><span class="dk">IP-Adresse</span><span class="dv mono blue"><?= h($ip_result['ip']) ?></span></div>
        <div class="data-row"><span class="dk">Handle</span><span class="dv mono"><?= h($ip_result['handle']) ?></span></div>
        <div class="data-row"><span class="dk">Netzname</span><span class="dv"><?= h($ip_result['name']) ?></span></div>
        <div class="data-row"><span class="dk">Typ</span><span class="dv"><?= h($ip_result['type']) ?></span></div>
        <div class="data-row"><span class="dk">Country</span><span class="dv"><?= h($ip_result['country']) ?></span></div>
        <div class="data-row"><span class="dk">Bereich</span><span class="dv mono" style="font-size:11px;"><?= h($ip_result['start_addr']) ?> – <?= h($ip_result['end_addr']) ?></span></div>
        <div class="data-row"><span class="dk">CIDR</span><span class="dv mono"><?= h($ip_result['cidr']) ?></span></div>
        <?php if ($ip_result['abuse_email']): ?>
        <div class="data-row"><span class="dk">Abuse-Kontakt</span><span class="dv mono" style="font-size:11px;"><?= h($ip_result['abuse_email']) ?></span></div>
        <?php endif; ?>
      </div>
      <div class="card">
        <div class="card-title"><i class="ti ti-building"></i> Organisation</div>
        <div class="data-row"><span class="dk">Organisation</span><span class="dv"><?= h($ip_result['org']) ?></span></div>
        <div class="data-row"><span class="dk">Registered</span><span class="dv mono"><?= h($ip_result['registered']) ?></span></div>
        <div class="data-row"><span class="dk">Updated</span><span class="dv mono"><?= h($ip_result['updated']) ?></span></div>
        <div class="data-row">
          <span class="dk">RDAP-Quelle</span>
          <span class="dv mono" style="font-size:10px;">
            <a href="<?= h($ip_result['rdap_url']) ?>" target="_blank" rel="nofollow" style="color:var(--purple-dim);">ARIN RDAP</a>
          </span>
        </div>
      </div>
    </div>

  <?php elseif ($result): ?>

    <!-- Stat-Leiste -->
    <div class="stat-grid">
      <div class="stat">
        <div class="stat-val" style="color:var(--green); font-size:13px;">Registered</div>
        <div class="stat-key">Status</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="font-size:12px; color:var(--text2);"><?= h($result['created']) ?></div>
        <div class="stat-key">Registriert am</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="font-size:12px; color:<?= is_numeric($result['days_left']) && $result['days_left'] < 30 ? 'var(--red)' : 'var(--text2)' ?>;">
          <?= h($result['expires']) ?>
        </div>
        <div class="stat-key">Läuft ab am</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="color:<?= is_numeric($result['days_left']) && $result['days_left'] < 30 ? 'var(--red)' : 'var(--green)' ?>;">
          <?= is_numeric($result['days_left']) ? $result['days_left'] . ' Tage' : '–' ?>
        </div>
        <div class="stat-key">Noch gültig</div>
      </div>
    </div>

    <?php if (is_numeric($result['days_left']) && $result['days_left'] < 30 && $result['days_left'] >= 0): ?>
    <div class="alert alert-warn">
      <i class="ti ti-alert-triangle"></i>
      <span>Die Domain läuft in <strong><?= $result['days_left'] ?> Tagen</strong> ab!</span>
    </div>
    <?php elseif (is_numeric($result['days_left']) && $result['days_left'] < 0): ?>
    <div class="alert alert-danger">
      <i class="ti ti-alert-circle"></i>
      <span>Die Domain-Registrierung ist abgelaufen!</span>
    </div>
    <?php endif; ?>

    <div class="grid2">
      <div class="card card-blue">
        <div class="card-title"><i class="ti ti-id"></i> Domain Information</div>
        <div class="data-row"><span class="dk">Domain</span><span class="dv mono blue"><?= h($result['domain']) ?></span></div>
        <div class="data-row"><span class="dk">Registrar</span><span class="dv"><?= h($result['registrar']) ?></span></div>
        <div class="data-row"><span class="dk">Inhaber</span><span class="dv" style="font-size:12px;"><?= h($result['registrant']) ?></span></div>
        <div class="data-row"><span class="dk">Registered</span><span class="dv mono"><?= h($result['created']) ?></span></div>
        <div class="data-row"><span class="dk">Updated</span><span class="dv mono"><?= h($result['updated']) ?></span></div>
        <div class="data-row"><span class="dk">Expires</span><span class="dv mono" style="color:<?= is_numeric($result['days_left']) && $result['days_left'] < 30 ? 'var(--red)' : 'var(--text2)' ?>;"><?= h($result['expires']) ?></span></div>
        <?php if ($result['abuse_email']): ?>
        <div class="data-row"><span class="dk">Abuse-Kontakt</span><span class="dv mono" style="font-size:11px;"><?= h($result['abuse_email']) ?></span></div>
        <?php endif; ?>
      </div>

      <div class="card">
        <div class="card-title"><i class="ti ti-server"></i> Nameservers</div>
        <?php if ($result['nameservers']): ?>
          <?php foreach ($result['nameservers'] as $ns): ?>
          <div class="data-row">
            <span class="dk"><i class="ti ti-circle-dot" style="font-size:10px; color:var(--green);"></i></span>
            <span class="dv mono" style="font-size:12px;"><?= h($ns) ?></span>
          </div>
          <?php endforeach; ?>
        <?php else: ?>
          <div style="color:var(--text4); font-size:13px; padding:8px 0;">Keine Nameservers gefunden</div>
        <?php endif; ?>

        <?php if ($result['statuses']): ?>
        <div style="margin-top:14px;">
          <div class="card-title" style="margin-bottom:8px;"><i class="ti ti-lock"></i> Domain-Status</div>
          <?php foreach ($result['statuses'] as $status): ?>
          <div style="margin-bottom:4px;">
            <span class="badge badge-green" style="font-size:10px;"><?= h($status) ?></span>
          </div>
          <?php endforeach; ?>
        </div>
        <?php endif; ?>
      </div>
    </div>

    <!-- DNS schnell prüfen -->
    <div class="card">
      <div class="card-title"><i class="ti ti-search"></i> DNS-Einträge direkt prüfen</div>
      <div class="data-row">
        <span class="dk">DNS-Lookup für diese Domain</span>
        <span class="dv">
          <a href="/dns-lookup.php?domain=<?= urlencode($result['domain']) ?>&type=ALL"
             class="btn btn-primary" style="font-size:12px; padding:5px 12px;">
            <i class="ti ti-search"></i> DNS-Lookup starten →
          </a>
        </span>
      </div>
      <div class="data-row">
        <span class="dk">Check SSL certificate</span>
        <span class="dv">
          <a href="/ssl-check.php?url=<?= urlencode('https://' . $result['domain']) ?>"
             class="btn btn-primary" style="font-size:12px; padding:5px 12px; background:#1e1a3a; border-color:#3d3080; color:var(--purple-dim);">
            <i class="ti ti-lock"></i> SSL-Check starten →
          </a>
        </span>
      </div>
    </div>

  <?php elseif (!$query): ?>
    <div class="alert alert-info">
      <i class="ti ti-info-circle"></i>
      <span>Gib eine Domain ein um WHOIS-Informationen abzurufen. Unterstützt werden alle gängigen TLDs wie .de, .com, .net, .org und mehr.</span>
    </div>
  <?php endif; ?>

  <div class="ad-slot">
    728×90 · Werbeplatz 2 – Mitte
    <small>Google AdSense</small>
  </div>

  <div class="tools-row">
    <a href="/"              class="tool-btn"><i class="ti ti-home"></i><span>My IP</span></a>
    <a href="/en/whois.php"     class="tool-btn current"><i class="ti ti-id"></i><span>WHOIS</span></a>
    <a href="/en/dns-lookup.php" class="tool-btn"><i class="ti ti-search"></i><span>DNS Lookup</span></a>
    <a href="/en/ssl-check.php" class="tool-btn"><i class="ti ti-lock"></i><span>SSL Check</span></a>
    <a href="/en/ip-lookup.php" class="tool-btn"><i class="ti ti-world-search"></i><span>IP Lookup</span></a>
  </div>

  <div class="seo-box">
    <h2>What is WHOIS?</h2>
    <p>WHOIS is a protocol das Informationen über registrierte Domains bereitstellt: Registrar, Registrierungsdatum, Ablaufdatum, Nameservers und Inhaber-Informationen. Seit der DSGVO (2018) werden persönliche Daten europäischer Domain-Inhaber aus dem WHOIS entfernt oder durch Datenschutz-Proxys ersetzt.</p>
    <p>Dieser WHOIS Lookup nutzt das moderne <strong>RDAP-Protokoll</strong> (Registration Data Access Protocol) – den offiziellen Nachfolger von klassischem WHOIS, der strukturierte JSON-Daten liefert und von allen großen Registraren unterstützt wird.</p>
  </div>

<?php require_once __DIR__ . '/footer.php'; ?>
