NS1: Support NS1_URLFWD (#1046)

This commit is contained in:
Tom Limoncelli 2021-02-10 16:57:15 +00:00 committed by GitHub
parent a83d2c89a8
commit a2042c2eda
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 146 additions and 138 deletions

View file

@ -949,7 +949,9 @@
<td class="success">
<i class="fa fa-check text-success" aria-hidden="true"></i>
</td>
<td><i class="fa fa-minus dim"></i></td>
<td class="success">
<i class="fa fa-check text-success" aria-hidden="true"></i>
</td>
<td><i class="fa fa-minus dim"></i></td>
<td><i class="fa fa-minus dim"></i></td>
<td class="success" data-toggle="tooltip" data-container="body" data-placement="top" title="A broken parser prevents TXTMulti strings from including double-quotes; The total length of all strings can&#39;t be longer than 512; and in reality must be shorter due to sloppy validation checks.">

2
go.mod
View file

@ -72,7 +72,7 @@ require (
golang.org/x/tools v0.1.0 // indirect
google.golang.org/api v0.38.0
gopkg.in/ini.v1 v1.62.0 // indirect
gopkg.in/ns1/ns1-go.v2 v2.0.0-20170502175150-c563826f4cbe
gopkg.in/ns1/ns1-go.v2 v2.4.3
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect

4
go.sum
View file

@ -832,8 +832,8 @@ gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/mgo.v2 v2.0.0-20160818015218-f2b6f6c918c4/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/ns1/ns1-go.v2 v2.0.0-20170502175150-c563826f4cbe h1:fuu3vZ8C6O8mk8Ich8YfkDv/Zpnx1HUotQk8JocBcSw=
gopkg.in/ns1/ns1-go.v2 v2.0.0-20170502175150-c563826f4cbe/go.mod h1:VV+3haRsgDiVLxyifmMBrBIuCWFBPYKbRssXB9z67Hw=
gopkg.in/ns1/ns1-go.v2 v2.4.3 h1:f7oKEJYSMD2TfR8RDeN1CT2ZsNahTPJEQfxOpmMCwvk=
gopkg.in/ns1/ns1-go.v2 v2.4.3/go.mod h1:GMnKY+ZuoJ+lVLL+78uSTjwTz2jMazq6AfGKQOYhsPk=
gopkg.in/readline.v1 v1.0.0-20160726135117-62c6fe619375/go.mod h1:lNEQeAhU009zbRxng+XOj5ITVgY24WcbNnQopyfKoYQ=
gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI=
gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78=

View file

@ -78,7 +78,7 @@ func (dc *DomainConfig) Punycode() error {
// Set the target:
switch rec.Type { // #rtype_variations
case "ALIAS", "MX", "NS", "CNAME", "PTR", "SRV", "URL", "URL301", "FRAME", "R53_ALIAS":
case "ALIAS", "MX", "NS", "CNAME", "PTR", "SRV", "URL", "URL301", "FRAME", "R53_ALIAS", "NS1_URLFWD":
// These rtypes are hostnames, therefore need to be converted (unlike, for example, an AAAA record)
t, err := idna.ToASCII(rec.GetTargetField())
if err != nil {

View file

@ -34,6 +34,7 @@ import (
// IMPORT_TRANSFORM
// NAMESERVER
// NO_PURGE
// NS1_URLFWD
// PAGE_RULE
// PURGE
// URL

View file

@ -821,6 +821,7 @@ var CF_TEMP_REDIRECT = recordBuilder('CF_TEMP_REDIRECT', {
var URL = recordBuilder('URL');
var URL301 = recordBuilder('URL301');
var FRAME = recordBuilder('FRAME');
var NS1_URLFWD = recordBuilder('NS1_URLFWD');
// SPF_BUILDER takes an object:
// parts: The parts of the SPF record (to be joined with ' ').

View file

@ -212,135 +212,135 @@ var _escData = map[string]*_escFile{
"/helpers.js": {
name: "helpers.js",
local: "pkg/js/helpers.js",
size: 28716,
size: 28762,
modtime: 0,
compressed: `
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
`,
},
}

View file

@ -8,6 +8,7 @@ import (
"gopkg.in/ns1/ns1-go.v2/rest"
"gopkg.in/ns1/ns1-go.v2/rest/model/dns"
"gopkg.in/ns1/ns1-go.v2/rest/model/filter"
"github.com/StackExchange/dnscontrol/v3/models"
"github.com/StackExchange/dnscontrol/v3/pkg/diff"
@ -25,6 +26,7 @@ var docNotes = providers.DocumentationNotes{
func init() {
providers.RegisterDomainServiceProviderType("NS1", newProvider, providers.CanUseSRV, docNotes)
providers.RegisterCustomRecordType("NS1_URLFWD", "NS1", "URLFWD")
}
type nsone struct {
@ -129,11 +131,12 @@ func (n *nsone) modify(recs models.Records, domain string) error {
func buildRecord(recs models.Records, domain string, id string) *dns.Record {
r := recs[0]
rec := &dns.Record{
Domain: r.GetLabelFQDN(),
Type: r.Type,
ID: id,
TTL: int(r.TTL),
Zone: domain,
Domain: r.GetLabelFQDN(),
Type: r.Type,
ID: id,
TTL: int(r.TTL),
Zone: domain,
Filters: []*filter.Filter{}, // Work through a bug in the NS1 API library that causes 400 Input validation failed (Value None for field '<obj>.filters' is not of type array)
}
for _, r := range recs {
if r.Type == "MX" {
@ -159,9 +162,10 @@ func convert(zr *dns.ZoneRecord, domain string) ([]*models.RecordConfig, error)
rec.SetLabelFromFQDN(zr.Domain, domain)
switch rtype := zr.Type; rtype {
case "ALIAS":
case "URLFWD":
rec.Type = rtype
if err := rec.SetTarget(ans); err != nil {
panic(fmt.Errorf("unparsable ALIAS record received from ns1: %w", err))
panic(fmt.Errorf("unparsable %s record received from ns1: %w", rtype, err))
}
default:
if err := rec.PopulateFromString(rtype, ans, domain); err != nil {