mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-11-13 11:45:27 +08:00
71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package easyname
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/StackExchange/dnscontrol/v3/models"
|
|
"github.com/StackExchange/dnscontrol/v3/providers"
|
|
)
|
|
|
|
type easynameProvider struct {
|
|
apikey string
|
|
apiauth string
|
|
signSalt string
|
|
domains map[string]easynameDomain
|
|
}
|
|
|
|
func init() {
|
|
providers.RegisterRegistrarType("EASYNAME", newEasyname)
|
|
}
|
|
|
|
func newEasyname(m map[string]string) (providers.Registrar, error) {
|
|
api := &easynameProvider{}
|
|
|
|
if m["email"] == "" || m["userid"] == "" || m["apikey"] == "" || m["authsalt"] == "" || m["signsalt"] == "" {
|
|
return nil, fmt.Errorf("missing easyname email, userid, apikey, authsalt and/or signsalt")
|
|
}
|
|
|
|
api.apikey, api.signSalt = m["apikey"], m["signsalt"]
|
|
composed := fmt.Sprintf(m["authsalt"], m["userid"], m["email"])
|
|
api.apiauth = hashEncodeString(composed)
|
|
|
|
return api, nil
|
|
}
|
|
|
|
// GetRegistrarCorrections gathers corrections that would being n to match dc.
|
|
func (c *easynameProvider) GetRegistrarCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
|
domain, err := c.getDomain(dc.Name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
nss := []string{}
|
|
for _, ns := range []string{domain.NameServer1, domain.NameServer2, domain.NameServer3, domain.NameServer4, domain.NameServer5, domain.NameServer6} {
|
|
if ns != "" {
|
|
nss = append(nss, ns)
|
|
}
|
|
}
|
|
sort.Strings(nss)
|
|
foundNameservers := strings.Join(nss, ",")
|
|
|
|
expected := []string{}
|
|
for _, ns := range dc.Nameservers {
|
|
expected = append(expected, ns.Name)
|
|
}
|
|
sort.Strings(expected)
|
|
expectedNameservers := strings.Join(expected, ",")
|
|
|
|
if foundNameservers != expectedNameservers {
|
|
return []*models.Correction{
|
|
{
|
|
Msg: fmt.Sprintf("Update nameservers %s -> %s", foundNameservers, expectedNameservers),
|
|
F: func() error {
|
|
return c.updateNameservers(expected, domain.ID)
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
return nil, nil
|
|
}
|