summaryrefslogtreecommitdiff
path: root/source/icanhazip.go
diff options
context:
space:
mode:
Diffstat (limited to 'source/icanhazip.go')
-rw-r--r--source/icanhazip.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/source/icanhazip.go b/source/icanhazip.go
new file mode 100644
index 0000000..62f2d9f
--- /dev/null
+++ b/source/icanhazip.go
@@ -0,0 +1,29 @@
+package source
+
+import (
+ "log/slog"
+ "net/netip"
+)
+
+type icanhazip struct {
+ log *slog.Logger
+}
+
+var _ Source = (*icanhazip)(nil)
+
+func newICanHazIp(log *slog.Logger) (*icanhazip, error) {
+ return &icanhazip{log: log}, nil
+}
+
+func (icanhazip) Supports(Family) bool { return true }
+
+func (s icanhazip) Lookup(family Family) (netip.Addr, error) {
+ s.log.Info("will look up address from the icanhazip.com service",
+ slog.String("family", string(family)),
+ )
+
+ if family == IPv6 {
+ return fetch("https://ipv6.icanhazip.com", IPv6)
+ }
+ return fetch("https://ipv4.icanhazip.com", IPv4)
+}