diff --git a/api/provider_settings.go b/api/provider_settings.go index cc840f4..3722a68 100644 --- a/api/provider_settings.go +++ b/api/provider_settings.go @@ -26,6 +26,7 @@ import ( "log" "net/http" + dnscontrol "github.com/StackExchange/dnscontrol/v4/providers" "github.com/gin-gonic/gin" "git.happydns.org/happyDomain/config" @@ -103,10 +104,22 @@ func getProviderSettingsState(cfg *config.Options, c *gin.Context) { } else if cfg.DisableProviders { c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Cannot change provider settings as DisableProviders parameter is set."}) return - } else if _, err = src.NewDNSServiceProvider(); err != nil { + } + + p, err := src.NewDNSServiceProvider() + if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return - } else if uss.Id == nil { + } + + if sr, ok := p.(dnscontrol.ZoneLister); ok { + if _, err = sr.ListZones(); err != nil { + c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) + return + } + } + + if uss.Id == nil { // Create a new Provider s, err := storage.MainStore.CreateProvider(user, src, uss.Name) if err != nil { diff --git a/model/provider.go b/model/provider.go index a6dc212..8bc9d02 100644 --- a/model/provider.go +++ b/model/provider.go @@ -67,9 +67,19 @@ type ProviderCombined struct { ProviderMeta } -func (p *ProviderCombined) Validate() (err error) { - _, err = p.NewDNSServiceProvider() - return +// Validate ensure the given parameters are corrects. +func (p *ProviderCombined) Validate() error { + prv, err := p.NewDNSServiceProvider() + if err != nil { + return err + } + + sr, ok := prv.(providers.ZoneLister) + if ok { + _, err = sr.ListZones() + } + + return err } func (p *ProviderCombined) getZoneRecords(fqdn string) (rcs models.Records, err error) {