Commit f7c61e8

bryfry <bryon@fryer.io>
2024-09-18 13:09:40
add iplookup
1 parent 54fd7a1
Changed files (2)
cmd
internal
iplookup
cmd/root.go
@@ -4,6 +4,7 @@ import (
 	"os"
 
 	"github.com/bryfry/cfdns/internal/cf"
+	"github.com/bryfry/cfdns/internal/iplookup"
 	"github.com/spf13/cobra"
 )
 
@@ -12,8 +13,13 @@ var rootCmd = &cobra.Command{
 	Short: "update cloudflare dns",
 	RunE: func(cmd *cobra.Command, args []string) error {
 
-		zoneName := "trustme.click"
-		subdomainName := "minecraft.trustme.click"
+		ipDetails, err := iplookup.Discover()
+		if err != nil {
+			return err
+		}
+
+		zoneName := ""
+		subdomainName := ""
 		apiToken := ""
 
 		cfdns, err := cf.New(
@@ -23,7 +29,7 @@ var rootCmd = &cobra.Command{
 		if err != nil {
 			return err
 		}
-		err = cfdns.SetIP("127.0.0.1")
+		err = cfdns.SetIP(ipDetails.Address)
 		if err != nil {
 			return err
 		}
internal/iplookup/main.go
@@ -0,0 +1,44 @@
+package iplookup
+
+import (
+	"encoding/json"
+	"fmt"
+	"io"
+	"net/http"
+)
+
+type Details struct {
+	Address    string `json:"address"`
+	UserAgent  string `json:"user_agent"`
+	DomainName string `json:"domain_name"`
+}
+
+const (
+	SERVICE_URL = "https://ip.trustme.click"
+)
+
+func Discover() (*Details, error) {
+	resp, err := http.Get(SERVICE_URL)
+	if err != nil {
+		return nil, fmt.Errorf(
+			"failed to fetch ip details url=%s: %w",
+			SERVICE_URL,
+			err)
+	}
+	b, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return nil, fmt.Errorf(
+			"failed to read ip details url=%s: %w",
+			SERVICE_URL,
+			err)
+	}
+	var details Details
+	err = json.Unmarshal(b, &details)
+	if err != nil {
+		return nil, fmt.Errorf(
+			"failed to unmarshal ip details url=%s: %w",
+			SERVICE_URL,
+			err)
+	}
+	return &details, nil
+}