package controllers import ( "log" "net/http" "github.com/gin-gonic/gin" "code.crute.me/mcrute/go_ddns_manager/dns" "code.crute.me/mcrute/go_ddns_manager/util" "code.crute.me/mcrute/go_ddns_manager/web/middleware" ) func UpdateDynamicDNS(c *gin.Context) { cfg := middleware.GetServerConfig(c) res := middleware.GetDDNSAuthKey(c) if res == "" { log.Println("ddns: Unable to get auth key") c.AbortWithStatus(http.StatusForbidden) return } zone, part := cfg.BindConfig.FindClosestZone(res, cfg.DynamicDnsView) if zone == nil { log.Println("ddns: Unable to locate zone") c.AbortWithStatus(http.StatusNotFound) return } inip := util.GetRequestIP(c) if inip == nil { log.Println("ddns: Unable to parse IP") c.AbortWithStatus(http.StatusInternalServerError) return } txn := cfg.DNSClient.StartUpdate(zone).Upsert(&dns.A{ Name: part, Ttl: 60, A: inip, }) if err := cfg.DNSClient.SendUpdate(txn); err != nil { log.Printf("ddns: %s", err) c.AbortWithStatus(http.StatusInternalServerError) return } c.String(http.StatusAccepted, "") }