55 lines
993 B
Go
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
|
|
}
|