From 4262255f5c512e5c53a167c24a2eea2821f01ea5 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 10 Nov 2020 02:36:44 +0000 Subject: Add dynamic DNS functionality --- web/controllers/manage.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 web/controllers/manage.go (limited to 'web/controllers/manage.go') diff --git a/web/controllers/manage.go b/web/controllers/manage.go new file mode 100644 index 0000000..53a38a6 --- /dev/null +++ b/web/controllers/manage.go @@ -0,0 +1,61 @@ +package controllers + +import ( + "net/http" + + "github.com/gin-gonic/gin" + + "code.crute.me/mcrute/frame" + "code.crute.me/mcrute/go_ddns_manager/dns" + "code.crute.me/mcrute/go_ddns_manager/web/middleware" +) + +type UpdateZone struct { + Create []dns.RR + Update []dns.RR + Delete []dns.RR +} + +func ManageRoot(c *gin.Context) { + c.JSON(http.StatusOK, map[string]string{ + "views_url": frame.MakeURL(c.Request, "/manage/views").String(), + }) +} + +func ListViews(c *gin.Context) { + cfg := middleware.GetServerConfig(c) + + out := map[string]string{} + + for _, vn := range cfg.BindConfig.Views() { + out[vn] = frame.MakeURL(c.Request, "/manage/views/%s", vn).String() + } + + c.JSON(http.StatusOK, out) +} + +func ListView(c *gin.Context) { + cfg := middleware.GetServerConfig(c) + view := c.Param("view") + + out := map[string]string{} + + for _, z := range cfg.BindConfig.ZonesInView(view) { + out[z.Name] = frame.MakeURL(c.Request, "/manage/views/%s/%s", view, z.Name).String() + } + + c.JSON(http.StatusOK, out) +} + +func ListZone(c *gin.Context) { + cfg := middleware.GetServerConfig(c) + zone := cfg.BindConfig.Zone(c.Param("view"), c.Param("zone")) + + rrs, err := cfg.DNSClient.ReadRemoteZone(zone) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + return + } + + c.JSON(http.StatusOK, rrs) +} -- cgit v1.2.3