Implement domains discovery through dnscontrol
This commit is contained in:
parent
b32c50b5bd
commit
7c05c6199c
|
@ -102,6 +102,6 @@ func getProviderSpec(c *gin.Context) {
|
||||||
|
|
||||||
c.JSON(http.StatusOK, viewProviderSpec{
|
c.JSON(http.StatusOK, viewProviderSpec{
|
||||||
Fields: forms.GenStructFields(src),
|
Fields: forms.GenStructFields(src),
|
||||||
//Capabilities: providers.GetProviderCapabilities(src),
|
Capabilities: providers.GetProviderCapabilities(src),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
dnscontrol "github.com/StackExchange/dnscontrol/v3/providers"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
"git.happydns.org/happydns/config"
|
"git.happydns.org/happydns/config"
|
||||||
|
@ -56,7 +57,7 @@ func declareProvidersRoutes(cfg *config.Options, router *gin.RouterGroup) {
|
||||||
//router.PUT("/api/providers/:sid", apiAuthHandler(providerHandler(updateProvider)))
|
//router.PUT("/api/providers/:sid", apiAuthHandler(providerHandler(updateProvider)))
|
||||||
//router.DELETE("/api/providers/:sid", apiAuthHandler(providerMetaHandler(deleteProvider)))
|
//router.DELETE("/api/providers/:sid", apiAuthHandler(providerMetaHandler(deleteProvider)))
|
||||||
|
|
||||||
//router.GET("/api/providers/:sid/domains", apiAuthHandler(providerHandler(getDomainsHostedByProvider)))
|
apiProviderRoutes.GET("/domains", getDomainsHostedByProvider)
|
||||||
|
|
||||||
//router.GET("/api/providers/:sid/domains_with_actions", apiAuthHandler(providerHandler(getDomainsWithActionsHostedByProvider)))
|
//router.GET("/api/providers/:sid/domains_with_actions", apiAuthHandler(providerHandler(getDomainsWithActionsHostedByProvider)))
|
||||||
//router.POST("/api/providers/:sid/domains_with_actions", apiAuthHandler(providerHandler(doDomainsWithActionsHostedByProvider)))
|
//router.POST("/api/providers/:sid/domains_with_actions", apiAuthHandler(providerHandler(doDomainsWithActionsHostedByProvider)))
|
||||||
|
@ -161,3 +162,27 @@ func addProvider(c *gin.Context) {
|
||||||
|
|
||||||
c.JSON(http.StatusOK, s)
|
c.JSON(http.StatusOK, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getDomainsHostedByProvider(c *gin.Context) {
|
||||||
|
provider := c.MustGet("provider").(*happydns.ProviderCombined)
|
||||||
|
|
||||||
|
p, err := provider.NewDNSServiceProvider()
|
||||||
|
if err != nil {
|
||||||
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": fmt.Sprintf("Unable to instantiate the provider: %s", err.Error())})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
sr, ok := p.(dnscontrol.ZoneLister)
|
||||||
|
if !ok {
|
||||||
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": "Provider doesn't support domain listing."})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
domains, err := sr.ListZones()
|
||||||
|
if err != nil {
|
||||||
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, domains)
|
||||||
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ import (
|
||||||
// Provider is where Domains and Zones can be managed.
|
// Provider is where Domains and Zones can be managed.
|
||||||
type Provider interface {
|
type Provider interface {
|
||||||
NewDNSServiceProvider() (providers.DNSServiceProvider, error)
|
NewDNSServiceProvider() (providers.DNSServiceProvider, error)
|
||||||
|
DNSControlName() string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProviderMeta holds the metadata associated to a Provider.
|
// ProviderMeta holds the metadata associated to a Provider.
|
||||||
|
|
|
@ -58,7 +58,11 @@ func (s *DDNSServer) NewDNSServiceProvider() (providers.DNSServiceProvider, erro
|
||||||
config["update-key"] = config["transfer-key"]
|
config["update-key"] = config["transfer-key"]
|
||||||
}
|
}
|
||||||
|
|
||||||
return providers.CreateDNSProvider("AXFRDDNS", config, nil)
|
return providers.CreateDNSProvider(s.DNSControlName(), config, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *DDNSServer) DNSControlName() string {
|
||||||
|
return "AXFRDDNS"
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -55,7 +55,11 @@ func (s *OVHAPI) NewDNSServiceProvider() (providers.DNSServiceProvider, error) {
|
||||||
"app-secret-key": appSecret,
|
"app-secret-key": appSecret,
|
||||||
"consumer-key": s.ConsumerKey,
|
"consumer-key": s.ConsumerKey,
|
||||||
}
|
}
|
||||||
return providers.CreateDNSProvider("OVH", config, nil)
|
return providers.CreateDNSProvider(s.DNSControlName(), config, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *OVHAPI) DNSControlName() string {
|
||||||
|
return "OVH"
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -36,6 +36,8 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/StackExchange/dnscontrol/v3/providers"
|
||||||
|
|
||||||
"git.happydns.org/happydns/model"
|
"git.happydns.org/happydns/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -69,6 +71,8 @@ func RegisterProvider(creator ProviderCreator, infos ProviderInfos) {
|
||||||
name := baseType.Name()
|
name := baseType.Name()
|
||||||
log.Println("Registering new provider:", name)
|
log.Println("Registering new provider:", name)
|
||||||
|
|
||||||
|
infos.Capabilities = GetProviderCapabilities(creator())
|
||||||
|
|
||||||
providersList[name] = Provider{
|
providersList[name] = Provider{
|
||||||
creator,
|
creator,
|
||||||
infos,
|
infos,
|
||||||
|
@ -89,3 +93,12 @@ func FindProvider(name string) (happydns.Provider, error) {
|
||||||
|
|
||||||
return src.Creator(), nil
|
return src.Creator(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetProviderCapabilities lists available capabilities for the given Provider.
|
||||||
|
func GetProviderCapabilities(prvd happydns.Provider) (caps []string) {
|
||||||
|
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanGetZones) {
|
||||||
|
caps = append(caps, "ListDomains")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user