66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package gandi
|
|
|
|
import (
|
|
"fmt"
|
|
"ncddns/mod"
|
|
|
|
"github.com/go-gandi/go-gandi"
|
|
"github.com/go-gandi/go-gandi/config"
|
|
"github.com/go-gandi/go-gandi/livedns"
|
|
)
|
|
|
|
var (
|
|
gandiEmailRecords = []livedns.DomainRecord{
|
|
{
|
|
RrsetType: "MX",
|
|
RrsetTTL: 10800,
|
|
RrsetName: "@",
|
|
RrsetValues: []string{"10 spool.mail.gandi.net.", "50 fb.mail.gandi.net."},
|
|
},
|
|
{
|
|
RrsetType: "TXT",
|
|
RrsetTTL: 10800,
|
|
RrsetName: "@",
|
|
RrsetValues: []string{`"v=spf1 include:_mailcust.gandi.net ?all"`},
|
|
},
|
|
}
|
|
)
|
|
|
|
type Client struct{}
|
|
|
|
func (g Client) IPSet(reqs []mod.IPSetRequest) error {
|
|
if len(reqs) == 0 {
|
|
return nil
|
|
}
|
|
if err := g.EnsureAllDomainsAreSame(reqs); err != nil {
|
|
return err
|
|
}
|
|
pwd := reqs[0].Password
|
|
domain := reqs[0].Domain
|
|
records := make([]livedns.DomainRecord, len(reqs))
|
|
for index, req := range reqs {
|
|
records[index] = livedns.DomainRecord{
|
|
RrsetType: "A",
|
|
RrsetTTL: 300,
|
|
RrsetName: req.Host,
|
|
RrsetValues: []string{req.IP},
|
|
}
|
|
}
|
|
records = append(records, gandiEmailRecords...)
|
|
|
|
_, err := gandi.NewLiveDNSClient(config.Config{
|
|
APIKey: pwd,
|
|
}).UpdateDomainRecords(domain, records)
|
|
return err
|
|
}
|
|
|
|
func (Client) EnsureAllDomainsAreSame(reqs []mod.IPSetRequest) error {
|
|
first := reqs[0].Domain
|
|
for _, dom := range reqs {
|
|
if first != dom.Domain {
|
|
return fmt.Errorf("domain mismatch: %s != %s", first, dom.Domain)
|
|
}
|
|
}
|
|
return nil
|
|
}
|