Skip to content

Commit

Permalink
Implement Zone update
Browse files Browse the repository at this point in the history
  • Loading branch information
Unknown committed May 9, 2019
1 parent 03cd005 commit ad0064e
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 3 deletions.
42 changes: 42 additions & 0 deletions api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,20 @@ import "net"
import "net/http"
import "os"
import "encoding/json"
import "os/exec"
import "fmt"
import "io/ioutil"
import "bytes"
import "bufio"

var dyndnsConfig = &Config{}

type Config struct {
User string
Password string
Zone string
Domains []string
TTL string
}

func validateIpV4(ipV4 string) bool {
Expand Down Expand Up @@ -52,6 +59,39 @@ func isDomainValid(domain string, domains []string) bool {
return false
}

func updateZone(zone string, domain string, recordType string, ttl string, ip string)string{

f, err := ioutil.TempFile("/tmp", "dyndns")
if err != nil {
return err.Error()
}

defer os.Remove(f.Name())
w := bufio.NewWriter(f)

w.WriteString(fmt.Sprintf("server localhost\n"))
w.WriteString(fmt.Sprintf("zone %s.\n", zone))
w.WriteString(fmt.Sprintf("update delete %s.%s %s\n", domain, zone, recordType))
w.WriteString(fmt.Sprintf("update add %s.%s %s %s %s\n", domain, zone, ttl, recordType, ip))
w.WriteString("send\n")

w.Flush()
f.Close()


cmd := exec.Command("/usr/bin/nsupdate", f.Name())
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err = cmd.Run()
if err != nil {
return err.Error() + ": " + stderr.String()
}
return out.String()
}


func main(){

dyndnsConfig.parseConfig("/root/dyndnsConfig.json")
Expand All @@ -70,6 +110,8 @@ func main(){
if isDomainValid(domain, dyndnsConfig.Domains) {
if (validateIpV4(ip) || validateIpV6(ip)) {
c.String(http.StatusOK, "domain: %s; ip: %s", domain, ip)
err := updateZone(dyndnsConfig.Zone, domain, "A", dyndnsConfig.TTL, ip)
c.String(http.StatusOK, "%s", err)
} else {
c.String(http.StatusBadRequest, "ip: %s ist not in a valid format", ip)
}
Expand Down
8 changes: 5 additions & 3 deletions setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,17 @@ echo "Creating local named configuration"
cat <<EOF > /etc/bind/named.conf.local
zone "${BIND9_ROOTDOMAIN}" {
type master;
file "/etc/bind/${BIND9_ROOTDOMAIN}.zone";
file "/var/cache/bind/${BIND9_ROOTDOMAIN}.zone";
allow-query { any; };
allow-transfer { none; };
allow-update { localhost; };
};
EOF

echo "Creating ${BIND9_ROOTDOMAIN} configuration"
cat <<EOF > /etc/bind/${BIND9_ROOTDOMAIN}.zone
${BIND9_ROOTDOMAIN} IN SOA localhost. root.localhost. (
cat <<EOF > /var/cache/bind/${BIND9_ROOTDOMAIN}.zone
${BIND9_ROOTDOMAIN}. IN SOA localhost. root.localhost. (
74 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
Expand Down Expand Up @@ -67,6 +68,7 @@ cat > /root/dyndnsConfig.json <<EOF
{
"User": "${API_USER}",
"Password": "${API_PASSWORD}",
"Zone": "${BIND9_ROOTDOMAIN}",
"Domains": ${DYNDNS_DOMAINS},
"TTL": "${DYNDNS_TTL}"
}
Expand Down

0 comments on commit ad0064e

Please sign in to comment.