Files
digitalocean-ddns/main.go
T
2021-09-12 20:09:08 -04:00

55 lines
993 B
Go

package main
import (
"io/ioutil"
"log"
"net/http"
"os"
"github.com/davidlick/digitalocean-ddns/digitalocean"
)
var (
client = &http.Client{}
)
func main() {
token := os.Getenv("DIGITALOCEAN_TOKEN")
doBaseUrl := os.Getenv("DIGITALOCEAN_URL")
doDomain := os.Getenv("DIGITALOCEAN_DOMAIN")
client := digitalocean.NewClient(doBaseUrl, token, doDomain)
ip, err := getPublicIP()
if err != nil {
log.Fatalf("failed to get public ip: %v", err)
}
id, err := client.GetARecordID()
if err != nil {
log.Fatalf("failed to get A record ID: %v", err)
}
err = client.SetARecord(id, ip)
if err != nil {
log.Fatalf("failed to set A record ip: %v", err)
}
log.Printf("successfully set DNS A record id %s to %s", id, ip)
}
func getPublicIP() (string, error) {
resp, err := http.Get("https://icanhazip.com")
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}