mirror of
https://github.com/taigrr/godns
synced 2025-01-18 04:03:25 -08:00
refactor DNSPod handler
This commit is contained in:
parent
fd0424630a
commit
cd3e7e3cb0
@ -37,7 +37,7 @@ func (handler *DNSPodHandler) DomainLoop(domain *Domain) {
|
||||
|
||||
for {
|
||||
|
||||
domainID := getDomain(domain.DomainName)
|
||||
domainID := handler.GetDomain(domain.DomainName)
|
||||
|
||||
if domainID == -1 {
|
||||
continue
|
||||
@ -53,7 +53,7 @@ func (handler *DNSPodHandler) DomainLoop(domain *Domain) {
|
||||
|
||||
for _, subDomain := range domain.SubDomains {
|
||||
|
||||
subDomainID, ip := getSubDomain(domainID, subDomain)
|
||||
subDomainID, ip := handler.GetSubDomain(domainID, subDomain)
|
||||
|
||||
if subDomainID == "" || ip == "" {
|
||||
log.Printf("domain: %s.%s subDomainID: %s ip: %s\n", subDomain, domain.DomainName, subDomainID, ip)
|
||||
@ -63,7 +63,7 @@ func (handler *DNSPodHandler) DomainLoop(domain *Domain) {
|
||||
//Continue to check the IP of sub-domain
|
||||
if len(ip) > 0 && !strings.Contains(currentIP, ip) {
|
||||
log.Printf("%s.%s Start to update record IP...\n", subDomain, domain.DomainName)
|
||||
updateIP(domainID, subDomainID, subDomain, currentIP)
|
||||
handler.UpdateIP(domainID, subDomainID, subDomain, currentIP)
|
||||
} else {
|
||||
log.Printf("%s.%s Current IP is same as domain IP, no need to update...\n", subDomain, domain.DomainName)
|
||||
}
|
||||
@ -74,7 +74,7 @@ func (handler *DNSPodHandler) DomainLoop(domain *Domain) {
|
||||
}
|
||||
}
|
||||
|
||||
func generateHeader(content url.Values) url.Values {
|
||||
func (handler *DNSPodHandler) GenerateHeader(content url.Values) url.Values {
|
||||
header := url.Values{}
|
||||
if configuration.LoginToken != "" {
|
||||
header.Add("login_token", configuration.LoginToken)
|
||||
@ -95,11 +95,7 @@ func generateHeader(content url.Values) url.Values {
|
||||
return header
|
||||
}
|
||||
|
||||
func apiVersion() {
|
||||
postData("/Info.Version", nil)
|
||||
}
|
||||
|
||||
func getDomain(name string) int64 {
|
||||
func (handler *DNSPodHandler) GetDomain(name string) int64 {
|
||||
|
||||
var ret int64
|
||||
values := url.Values{}
|
||||
@ -107,7 +103,7 @@ func getDomain(name string) int64 {
|
||||
values.Add("offset", "0")
|
||||
values.Add("length", "20")
|
||||
|
||||
response, err := postData("/Domain.List", values)
|
||||
response, err := handler.PostData("/Domain.List", values)
|
||||
|
||||
if err != nil {
|
||||
log.Println("Failed to get domain list...")
|
||||
@ -147,7 +143,7 @@ func getDomain(name string) int64 {
|
||||
return ret
|
||||
}
|
||||
|
||||
func getSubDomain(domainID int64, name string) (string, string) {
|
||||
func (handler *DNSPodHandler) GetSubDomain(domainID int64, name string) (string, string) {
|
||||
log.Println("debug:", domainID, name)
|
||||
var ret, ip string
|
||||
value := url.Values{}
|
||||
@ -156,7 +152,7 @@ func getSubDomain(domainID int64, name string) (string, string) {
|
||||
value.Add("length", "1")
|
||||
value.Add("sub_domain", name)
|
||||
|
||||
response, err := postData("/Record.List", value)
|
||||
response, err := handler.PostData("/Record.List", value)
|
||||
|
||||
if err != nil {
|
||||
log.Println("Failed to get domain list")
|
||||
@ -191,7 +187,7 @@ func getSubDomain(domainID int64, name string) (string, string) {
|
||||
return ret, ip
|
||||
}
|
||||
|
||||
func updateIP(domainID int64, subDomainID string, subDomainName string, ip string) {
|
||||
func (handler *DNSPodHandler) UpdateIP(domainID int64, subDomainID string, subDomainName string, ip string) {
|
||||
value := url.Values{}
|
||||
value.Add("domain_id", strconv.FormatInt(domainID, 10))
|
||||
value.Add("record_id", subDomainID)
|
||||
@ -200,7 +196,7 @@ func updateIP(domainID int64, subDomainID string, subDomainName string, ip strin
|
||||
value.Add("record_line", "默认")
|
||||
value.Add("value", ip)
|
||||
|
||||
response, err := postData("/Record.Modify", value)
|
||||
response, err := handler.PostData("/Record.Modify", value)
|
||||
|
||||
if err != nil {
|
||||
log.Println("Failed to update record to new IP!")
|
||||
@ -221,7 +217,7 @@ func updateIP(domainID int64, subDomainID string, subDomainName string, ip strin
|
||||
|
||||
}
|
||||
|
||||
func postData(url string, content url.Values) (string, error) {
|
||||
func (handler *DNSPodHandler) PostData(url string, content url.Values) (string, error) {
|
||||
client := &http.Client{}
|
||||
|
||||
if configuration.Socks5Proxy != "" {
|
||||
@ -239,7 +235,7 @@ func postData(url string, content url.Values) (string, error) {
|
||||
httpTransport.Dial = dialer.Dial
|
||||
}
|
||||
|
||||
values := generateHeader(content)
|
||||
values := handler.GenerateHeader(content)
|
||||
req, _ := http.NewRequest("POST", "https://dnsapi.cn"+url, strings.NewReader(values.Encode()))
|
||||
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
|
6
godns.go
6
godns.go
@ -12,6 +12,10 @@ const (
|
||||
PANIC_MAX = 5
|
||||
// INTERVAL is minute
|
||||
INTERVAL = 5
|
||||
// DNSPod
|
||||
DNSPOD = "DNSPod"
|
||||
// HE
|
||||
HE = "HE"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -49,7 +53,7 @@ func main() {
|
||||
}
|
||||
|
||||
func dnsLoop() {
|
||||
handler := createHandler(configuration.Type)
|
||||
handler := createHandler(configuration.Provider)
|
||||
for _, domain := range configuration.Domains {
|
||||
go handler.DomainLoop(&domain)
|
||||
}
|
||||
|
@ -8,9 +8,9 @@ func createHandler(provider string) IHandler {
|
||||
var handler IHandler
|
||||
|
||||
switch provider {
|
||||
case "DNSPod":
|
||||
case DNSPOD:
|
||||
handler = IHandler(&DNSPodHandler{})
|
||||
case "HE":
|
||||
case HE:
|
||||
handler = IHandler(&HEHandler{})
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ type Domain struct {
|
||||
|
||||
//Settings struct
|
||||
type Settings struct {
|
||||
Type string `json:"type"`
|
||||
Provider string `json:"provider"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
LoginToken string `json:"login_token"`
|
||||
|
12
utils.go
12
utils.go
@ -59,8 +59,16 @@ func usage() {
|
||||
}
|
||||
|
||||
func checkSettings(config *Settings) error {
|
||||
if (config.Email == "" || config.Password == "") && config.LoginToken == "" {
|
||||
return errors.New("Input email/password or login token cannot be empty!")
|
||||
if config.Provider == DNSPOD {
|
||||
if (config.Email == "" || config.Password == "") && config.LoginToken == "" {
|
||||
return errors.New("Email/Password or login token cannot be empty!")
|
||||
}
|
||||
} else if config.Provider == HE {
|
||||
if config.Password == "" {
|
||||
return errors.New("Password cannot be empty!")
|
||||
}
|
||||
} else {
|
||||
return errors.New("Please provide supported DNS provider: DNSPod/HE")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Loading…
x
Reference in New Issue
Block a user