feat: add RDAP-first registration lookup with WHOIS fallback #1

Merged
exler merged 1 commit from feat/rdap-whois-fallback into main 2026-09-12 11:37:55 +02:00
Collaborator

Summary

  • Prefer registry RDAP discovered through IANA's DNS bootstrap registry, with a cacheable 24-hour bootstrap lookup.
  • Fall back to TLD-aware port-43 WHOIS when RDAP is unavailable or unusable.
  • Add full .pl fallback support through NASK whois.dns.pl.
  • Preserve structured registration details through analysis caching and display the source in the UI.

User-visible behavior

workwave.pl now renders data from Registry RDAP: OVH SAS, registration/last-update/expiration dates, and NASK nameservers. The UI explicitly labels Registry RDAP or WHOIS fallback.

Implementation

  • RDAP JSON event/entity/vCard mapping and bounded HTTP timeouts/body sizes.
  • Longest-suffix TLD matching from IANA bootstrap data.
  • NASK parser for multiline registrar/nameserver fields plus created, last modified, and renewal date.
  • Generic WHOIS parsing retained for standard registries.

Validation

  • Deterministic RDAP/WHOIS fixtures, including captured workwave.pl data.
  • RDAP failure → WHOIS fallback, routing, timeout, cache round-trip, and rendered UI tests.
  • gofmt, go vet ./..., go test ./..., and go build were executed in the Go 1.26 build container.

Visual QA

A browser capture verified the workwave.pl registration panel renders the Registry RDAP badge and data. The capture is not committed.

## Summary - Prefer registry RDAP discovered through IANA's DNS bootstrap registry, with a cacheable 24-hour bootstrap lookup. - Fall back to TLD-aware port-43 WHOIS when RDAP is unavailable or unusable. - Add full `.pl` fallback support through NASK `whois.dns.pl`. - Preserve structured registration details through analysis caching and display the source in the UI. ## User-visible behavior `workwave.pl` now renders data from Registry RDAP: OVH SAS, registration/last-update/expiration dates, and NASK nameservers. The UI explicitly labels `Registry RDAP` or `WHOIS fallback`. ## Implementation - RDAP JSON event/entity/vCard mapping and bounded HTTP timeouts/body sizes. - Longest-suffix TLD matching from IANA bootstrap data. - NASK parser for multiline registrar/nameserver fields plus `created`, `last modified`, and `renewal date`. - Generic WHOIS parsing retained for standard registries. ## Validation - Deterministic RDAP/WHOIS fixtures, including captured `workwave.pl` data. - RDAP failure → WHOIS fallback, routing, timeout, cache round-trip, and rendered UI tests. - `gofmt`, `go vet ./...`, `go test ./...`, and `go build` were executed in the Go 1.26 build container. ## Visual QA A browser capture verified the `workwave.pl` registration panel renders the Registry RDAP badge and data. The capture is not committed.
Replace the single whois.internic.net WHOIS query with a structured
RegistrationInfo lookup that tries RDAP first (endpoint discovered via
the cached IANA DNS RDAP bootstrap registry, longest-suffix TLD match)
and falls back to port-43 WHOIS with TLD-aware server selection
(.pl -> whois.dns.pl) when RDAP is unavailable, not found, or
unparseable. Adds NASK-specific .pl WHOIS parsing alongside the
existing generic parser, and wires the structured result through the
analysis cache and results UI, which now labels the data source as
"Registry RDAP" or "WHOIS fallback".

Verified against workwave.pl's real RDAP/WHOIS data from rdap.dns.pl
and whois.dns.pl.
exler merged commit bb42a1be60 into main 2026-09-12 11:37:55 +02:00
exler deleted branch feat/rdap-whois-fallback 2026-09-12 11:37:55 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
exler/domaindive!1
No description provided.