Reintegrate RRtype filtering by provider, using dnscontrol features
This commit is contained in:
parent
da540c9778
commit
26933d5917
|
@ -37,6 +37,7 @@ import (
|
|||
"reflect"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v3/providers"
|
||||
"github.com/miekg/dns"
|
||||
|
||||
"git.happydns.org/happydns/model"
|
||||
)
|
||||
|
@ -96,9 +97,30 @@ func FindProvider(name string) (happydns.Provider, error) {
|
|||
|
||||
// GetProviderCapabilities lists available capabilities for the given Provider.
|
||||
func GetProviderCapabilities(prvd happydns.Provider) (caps []string) {
|
||||
// Features
|
||||
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanGetZones) {
|
||||
caps = append(caps, "ListDomains")
|
||||
}
|
||||
|
||||
// Compatible RR
|
||||
for _, v := range []uint16{dns.TypeA, dns.TypeAAAA, dns.TypeCNAME, dns.TypeNS, dns.TypeTXT} {
|
||||
caps = append(caps, fmt.Sprintf("rr-%d-%s", v, dns.TypeToString[v]))
|
||||
}
|
||||
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanUseOPENPGPKEY) {
|
||||
caps = append(caps, fmt.Sprintf("rr-%d-%s", dns.TypeOPENPGPKEY, dns.TypeToString[dns.TypeOPENPGPKEY]))
|
||||
}
|
||||
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanUseSOA) {
|
||||
caps = append(caps, fmt.Sprintf("rr-%d-%s", dns.TypeSOA, dns.TypeToString[dns.TypeSOA]))
|
||||
}
|
||||
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanUseSRV) {
|
||||
caps = append(caps, fmt.Sprintf("rr-%d-%s", dns.TypeSRV, dns.TypeToString[dns.TypeSRV]))
|
||||
}
|
||||
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanUseSSHFP) {
|
||||
caps = append(caps, fmt.Sprintf("rr-%d-%s", dns.TypeSSHFP, dns.TypeToString[dns.TypeSSHFP]))
|
||||
}
|
||||
if providers.ProviderHasCapability(prvd.DNSControlName(), providers.CanUseTLSA) {
|
||||
caps = append(caps, fmt.Sprintf("rr-%d-%s", dns.TypeTLSA, dns.TypeToString[dns.TypeTLSA]))
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import ProvidersApi from '@/api/providers'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'HFamilyTabs',
|
||||
|
@ -149,21 +149,46 @@ export default {
|
|||
},
|
||||
|
||||
filteredNewServices () {
|
||||
return this.analyzeRestrictions(this.services)
|
||||
return this.analyzeRestrictions(this.services, this.availableResourceTypes)
|
||||
},
|
||||
|
||||
...mapGetters('providers', ['providers_getAll']),
|
||||
...mapGetters('providerSpecs', ['providerSpecs_getAll'])
|
||||
},
|
||||
|
||||
watch: {
|
||||
providers_getAll: function (t) {
|
||||
this.loadProviderSpecs(t)
|
||||
},
|
||||
providerSpecs_getAll: function (t) {
|
||||
this.loadProviderSpecs(t)
|
||||
}
|
||||
},
|
||||
|
||||
created () {
|
||||
ProvidersApi.getAvailableResourceTypes(this.domain.id_provider)
|
||||
.then(
|
||||
(response) => {
|
||||
this.availableResourceTypes = response.data
|
||||
}
|
||||
)
|
||||
if (this.providerSpecs_getAll !== null && this.providers_getAll !== null) {
|
||||
this.loadProviderSpecs(this.providerSpecs_getAll)
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
analyzeRestrictions (allServices) {
|
||||
loadProviderSpecs (specs) {
|
||||
if (this.providerSpecs_getAll === null || this.providers_getAll === null) {
|
||||
return
|
||||
}
|
||||
|
||||
const availableResourceTypes = []
|
||||
|
||||
specs[this.providers_getAll[this.domain.id_provider]._srctype].capabilities.forEach(function (i) {
|
||||
if (i.startsWith('rr-')) {
|
||||
availableResourceTypes.push(parseInt(i.substr(3, i.indexOf('-', 4) - 3)))
|
||||
}
|
||||
})
|
||||
|
||||
this.availableResourceTypes = availableResourceTypes
|
||||
},
|
||||
|
||||
analyzeRestrictions (allServices, availableResourceTypes) {
|
||||
const ret = {}
|
||||
|
||||
for (const type in allServices) {
|
||||
|
@ -173,7 +198,7 @@ export default {
|
|||
// Handle NeedTypes restriction: hosting provider need to support given types.
|
||||
if (svc.restrictions.needTypes) {
|
||||
for (const k in svc.restrictions.needTypes) {
|
||||
if (this.availableResourceTypes.indexOf(svc.restrictions.needTypes[k]) < 0) {
|
||||
if (availableResourceTypes.indexOf(svc.restrictions.needTypes[k]) < 0) {
|
||||
ret[type] = 'is not available on this domain name hosting provider.'
|
||||
continue
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user