added wildcard option

This commit is contained in:
Malte 2022-04-06 10:58:41 +02:00
parent 217cb2a575
commit 47cb9e742a
4 changed files with 29 additions and 12 deletions

View File

@ -79,7 +79,7 @@ func (h *Handler) CreateCName(c echo.Context) (err error) {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
if err = nswrapper.UpdateRecord(cname.Hostname, fmt.Sprintf("%s.%s", cname.Target.Hostname, cname.Target.Domain), "CNAME", cname.Target.Domain, cname.Ttl); err != nil { if err = nswrapper.UpdateRecord(cname.Hostname, fmt.Sprintf("%s.%s", cname.Target.Hostname, cname.Target.Domain), "CNAME", cname.Target.Domain, cname.Ttl, h.AllowWildcard); err != nil {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
@ -114,7 +114,7 @@ func (h *Handler) DeleteCName(c echo.Context) (err error) {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
if err = nswrapper.DeleteRecord(cname.Hostname, cname.Target.Domain); err != nil { if err = nswrapper.DeleteRecord(cname.Hostname, cname.Target.Domain, h.AllowWildcard); err != nil {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }

View File

@ -24,6 +24,7 @@ type Handler struct {
DisableAdminAuth bool DisableAdminAuth bool
LastClearedLogs time.Time LastClearedLogs time.Time
ClearInterval uint64 ClearInterval uint64
AllowWildcard bool
} }
type Envs struct { type Envs struct {
@ -112,11 +113,18 @@ func (h *Handler) ParseEnvs() (adminAuth bool, err error) {
h.AuthAdmin = true h.AuthAdmin = true
h.DisableAdminAuth = true h.DisableAdminAuth = true
} }
h.Title = os.Getenv("DDNS_TITLE") var ok bool
if h.Title == "" { h.Title, ok = os.LookupEnv("DDNS_TITLE")
if !ok {
h.Title = "TheBBCloud DynDNS" h.Title = "TheBBCloud DynDNS"
} }
allowWildcard, ok := os.LookupEnv("DDNS_ALLOW_WILDCARD")
if ok {
h.AllowWildcard, err = strconv.ParseBool(allowWildcard)
if err == nil {
log.Info("Wildcard allowed")
}
}
clearEnv := os.Getenv("DDNS_CLEAR_LOG_INTERVAL") clearEnv := os.Getenv("DDNS_CLEAR_LOG_INTERVAL")
clearInterval, err := strconv.ParseUint(clearEnv, 10, 32) clearInterval, err := strconv.ParseUint(clearEnv, 10, 32)
if err != nil { if err != nil {

View File

@ -125,7 +125,7 @@ func (h *Handler) CreateHost(c echo.Context) (err error) {
return c.JSON(http.StatusBadRequest, &Error{fmt.Sprintf("ip %s is not a valid ip", host.Ip)}) return c.JSON(http.StatusBadRequest, &Error{fmt.Sprintf("ip %s is not a valid ip", host.Ip)})
} }
if err = nswrapper.UpdateRecord(host.Hostname, host.Ip, ipType, host.Domain, host.Ttl); err != nil { if err = nswrapper.UpdateRecord(host.Hostname, host.Ip, ipType, host.Domain, host.Ttl, h.AllowWildcard); err != nil {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
} }
@ -172,7 +172,7 @@ func (h *Handler) UpdateHost(c echo.Context) (err error) {
return c.JSON(http.StatusBadRequest, &Error{fmt.Sprintf("ip %s is not a valid ip", host.Ip)}) return c.JSON(http.StatusBadRequest, &Error{fmt.Sprintf("ip %s is not a valid ip", host.Ip)})
} }
if err = nswrapper.UpdateRecord(host.Hostname, host.Ip, ipType, host.Domain, host.Ttl); err != nil { if err = nswrapper.UpdateRecord(host.Hostname, host.Ip, ipType, host.Domain, host.Ttl, h.AllowWildcard); err != nil {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
} }
@ -216,7 +216,7 @@ func (h *Handler) DeleteHost(c echo.Context) (err error) {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
if err = nswrapper.DeleteRecord(host.Hostname, host.Domain); err != nil { if err = nswrapper.DeleteRecord(host.Hostname, host.Domain, h.AllowWildcard); err != nil {
return c.JSON(http.StatusBadRequest, &Error{err.Error()}) return c.JSON(http.StatusBadRequest, &Error{err.Error()})
} }
@ -276,7 +276,7 @@ func (h *Handler) UpdateIP(c echo.Context) (err error) {
} }
// add/update DNS record // add/update DNS record
if err = nswrapper.UpdateRecord(log.Host.Hostname, log.SentIP, ipType, log.Host.Domain, log.Host.Ttl); err != nil { if err = nswrapper.UpdateRecord(log.Host.Hostname, log.SentIP, ipType, log.Host.Domain, log.Host.Ttl, h.AllowWildcard); err != nil {
log.Message = fmt.Sprintf("DNS error: %v", err) log.Message = fmt.Sprintf("DNS error: %v", err)
l.Error(log.Message) l.Error(log.Message)
if err = h.CreateLogEntry(log); err != nil { if err = h.CreateLogEntry(log); err != nil {

View File

@ -11,7 +11,7 @@ import (
) )
// UpdateRecord builds a nsupdate file and updates a record by executing it with nsupdate. // UpdateRecord builds a nsupdate file and updates a record by executing it with nsupdate.
func UpdateRecord(hostname string, target string, addrType string, zone string, ttl int) error { func UpdateRecord(hostname string, target string, addrType string, zone string, ttl int, enableWildcard bool) error {
log.Info(fmt.Sprintf("%s record update request: %s -> %s", addrType, hostname, target)) log.Info(fmt.Sprintf("%s record update request: %s -> %s", addrType, hostname, target))
f, err := ioutil.TempFile(os.TempDir(), "dyndns") f, err := ioutil.TempFile(os.TempDir(), "dyndns")
@ -25,7 +25,13 @@ func UpdateRecord(hostname string, target string, addrType string, zone string,
w.WriteString(fmt.Sprintf("server %s\n", "localhost")) w.WriteString(fmt.Sprintf("server %s\n", "localhost"))
w.WriteString(fmt.Sprintf("zone %s\n", zone)) w.WriteString(fmt.Sprintf("zone %s\n", zone))
w.WriteString(fmt.Sprintf("update delete %s.%s %s\n", hostname, zone, addrType)) w.WriteString(fmt.Sprintf("update delete %s.%s %s\n", hostname, zone, addrType))
if enableWildcard {
w.WriteString(fmt.Sprintf("update delete %s.%s %s\n", "*."+hostname, zone, addrType))
}
w.WriteString(fmt.Sprintf("update add %s.%s %v %s %s\n", hostname, zone, ttl, addrType, target)) w.WriteString(fmt.Sprintf("update add %s.%s %v %s %s\n", hostname, zone, ttl, addrType, target))
if enableWildcard {
w.WriteString(fmt.Sprintf("update add %s.%s %v %s %s\n", "*."+hostname, zone, ttl, addrType, target))
}
w.WriteString("send\n") w.WriteString("send\n")
w.Flush() w.Flush()
@ -49,7 +55,7 @@ func UpdateRecord(hostname string, target string, addrType string, zone string,
} }
// DeleteRecord builds a nsupdate file and deletes a record by executing it with nsupdate. // DeleteRecord builds a nsupdate file and deletes a record by executing it with nsupdate.
func DeleteRecord(hostname string, zone string) error { func DeleteRecord(hostname string, zone string, enableWildcard bool) error {
fmt.Printf("record delete request: %s\n", hostname) fmt.Printf("record delete request: %s\n", hostname)
f, err := ioutil.TempFile(os.TempDir(), "dyndns") f, err := ioutil.TempFile(os.TempDir(), "dyndns")
@ -63,6 +69,9 @@ func DeleteRecord(hostname string, zone string) error {
w.WriteString(fmt.Sprintf("server %s\n", "localhost")) w.WriteString(fmt.Sprintf("server %s\n", "localhost"))
w.WriteString(fmt.Sprintf("zone %s\n", zone)) w.WriteString(fmt.Sprintf("zone %s\n", zone))
w.WriteString(fmt.Sprintf("update delete %s.%s\n", hostname, zone)) w.WriteString(fmt.Sprintf("update delete %s.%s\n", hostname, zone))
if enableWildcard {
w.WriteString(fmt.Sprintf("update delete %s.%s\n", "*."+hostname, zone))
}
w.WriteString("send\n") w.WriteString("send\n")
w.Flush() w.Flush()