Files
ddns-updater-qdm12-3/internal/update/godaddy.go
2020-05-11 18:11:20 -04:00

48 lines
1.2 KiB
Go

package update
import (
"encoding/json"
"fmt"
"net"
"net/http"
"net/url"
"github.com/qdm12/ddns-updater/internal/network"
libnetwork "github.com/qdm12/golibs/network"
)
func updateGoDaddy(client libnetwork.Client, host, domain, key, secret string, ip net.IP) error {
if ip == nil {
return fmt.Errorf("IP address was not given to updater")
}
type goDaddyPutBody struct {
Data string `json:"data"` // IP address to update to
}
u := url.URL{
Scheme: "https",
Host: "api.godaddy.com",
Path: fmt.Sprintf("/v1/domains/%s/records/A/%s", domain, host),
}
r, err := network.BuildHTTPPut(u.String(), []goDaddyPutBody{{ip.String()}})
if err != nil {
return err
}
r.Header.Set("User-Agent", "DDNS-Updater quentin.mcgaw@gmail.com")
r.Header.Set("Authorization", "sso-key "+key+":"+secret)
status, content, err := client.DoHTTPRequest(r)
if err != nil {
return err
} else if status != http.StatusOK {
var parsedJSON struct {
Message string `json:"message"`
}
if err := json.Unmarshal(content, &parsedJSON); err != nil {
return err
} else if len(parsedJSON.Message) > 0 {
return fmt.Errorf("HTTP status %d - %s", status, parsedJSON.Message)
}
return fmt.Errorf("HTTP status %d", status)
}
return nil
}