Implement domains discovery through dnscontrol
This commit is contained in:
parent
b32c50b5bd
commit
7c05c6199c
|
@ -101,7 +101,7 @@ func getProviderSpec(c *gin.Context) {
|
|||
src := c.MustGet("providertype").(happydns.Provider)
|
||||
|
||||
c.JSON(http.StatusOK, viewProviderSpec{
|
||||
Fields: forms.GenStructFields(src),
|
||||
//Capabilities: providers.GetProviderCapabilities(src),
|
||||
Fields: forms.GenStructFields(src),
|
||||
Capabilities: providers.GetProviderCapabilities(src),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ import (
|
|||
"net/http"
|
||||
"strconv"
|
||||
|
||||
dnscontrol "github.com/StackExchange/dnscontrol/v3/providers"
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"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.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.POST("/api/providers/:sid/domains_with_actions", apiAuthHandler(providerHandler(doDomainsWithActionsHostedByProvider)))
|
||||
|
@ -161,3 +162,27 @@ func addProvider(c *gin.Context) {
|
|||
|
||||
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.
|
||||
type Provider interface {
|
||||
NewDNSServiceProvider() (providers.DNSServiceProvider, error)
|
||||
DNSControlName() string
|
||||
}
|
||||
|
||||
// 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"]
|
||||
}
|
||||
|
||||
return providers.CreateDNSProvider("AXFRDDNS", config, nil)
|
||||
return providers.CreateDNSProvider(s.DNSControlName(), config, nil)
|
||||
}
|
||||
|
||||
func (s *DDNSServer) DNSControlName() string {
|
||||
return "AXFRDDNS"
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
@ -55,7 +55,11 @@ func (s *OVHAPI) NewDNSServiceProvider() (providers.DNSServiceProvider, error) {
|
|||
"app-secret-key": appSecret,
|
||||
"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() {
|
||||
|
|
|
@ -36,6 +36,8 @@ import (
|
|||
"log"
|
||||
"reflect"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v3/providers"
|
||||
|
||||
"git.happydns.org/happydns/model"
|
||||
)
|
||||
|
||||
|
@ -69,6 +71,8 @@ func RegisterProvider(creator ProviderCreator, infos ProviderInfos) {
|
|||
name := baseType.Name()
|
||||
log.Println("Registering new provider:", name)
|
||||
|
||||
infos.Capabilities = GetProviderCapabilities(creator())
|
||||
|
||||
providersList[name] = Provider{
|
||||
creator,
|
||||
infos,
|
||||
|
@ -89,3 +93,12 @@ func FindProvider(name string) (happydns.Provider, error) {
|
|||
|
||||
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