Skip to content

feat(dnsprovider): add Hover adapter (v2 PR 6 — completes cascade)#24

Merged
intel352 merged 1 commit into
masterfrom
feat/dns-provider-v2-hover
May 26, 2026
Merged

feat(dnsprovider): add Hover adapter (v2 PR 6 — completes cascade)#24
intel352 merged 1 commit into
masterfrom
feat/dns-provider-v2-hover

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

PR 6 of 6 in DNS provider v2 cascade. Adds Hover adapter wrapping pkg/hoverclient v0.3.0 (extracted via workflow-plugin-hover#26 — merged today + tagged v0.3.0).

Closes the v2 manifest. Completes the Hover deferral noted in PR #15 / retro #23.

Cred keys

key required description
username yes Hover account username
password yes Hover account password
totp_secret optional base32 TOTP shared secret for 2FA

Architectural notes

  • hoverClientIface in production file; tests inject stubs (matches v2 cycle-4 pattern).
  • TOTP parsed via hoverclient.ParseBase32 — invalid base32 rejected at construction.
  • UpsertTXT does GetDomain → ListRecords → DeleteRecord(stale) → CreateRecord(new) because Hover API takes domain ID + has no batch primitive.
  • Foreign records (different name+type) survive UpsertTXT — verified by test.

Test plan

  • 10 new Hover tests PASS (cred validation 4, dispatch 1, UpsertTXT foreign-survival 1, GetTXT filter 1, UpsertRecord 2, DeleteRecord 2)
  • GOWORK=off go vet ./... clean
  • Plugin binary builds (77 MB)

🤖 Generated with Claude Code

Pinned to pkg/hoverclient v0.3.0 (extracted from internal/hover via
workflow-plugin-hover#26 → merged 4fb779e + tag v0.3.0).

Architecture:
- hoverClientIface in production file (Get/List/Create/Update/Delete);
  *hoverclient.Client satisfies it (compile-checked).
- Iface-typed .client field; tests inject stubs.
- TOTP secret parsed via hoverclient.ParseBase32 — invalid base32
  rejected at construction.
- UpsertTXT emulates RRset replace: GetDomain → ListRecords →
  delete same-name TXT → CreateRecord per value (Hover API takes
  domain ID + per-record CRUD only).
- priority dropped for non-MX/SRV (matches v1 + Hover DNSRecord
  has no Priority field).

Tests (10): cred validation (4) + dispatch (1) + UpsertTXT
foreign-record-survival (1) + GetTXT filter (1) + UpsertRecord
A-priority-drop + negative-priority-reject (2) + DeleteRecord
+ error-redaction (2).
@intel352 intel352 merged commit c50d548 into master May 26, 2026
3 checks passed
@intel352 intel352 deleted the feat/dns-provider-v2-hover branch May 26, 2026 09:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant