diff --git a/dnspod_handler.go b/dnspod_handler.go index 6a13eac..96aafe9 100644 --- a/dnspod_handler.go +++ b/dnspod_handler.go @@ -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") diff --git a/godns.go b/godns.go index f92a9d0..e22e653 100644 --- a/godns.go +++ b/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) } diff --git a/handler.go b/handler.go index 13a1aae..fedd3c1 100644 --- a/handler.go +++ b/handler.go @@ -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{}) } diff --git a/settings.go b/settings.go index 3c54ba5..bcefb8b 100644 --- a/settings.go +++ b/settings.go @@ -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"` diff --git a/utils.go b/utils.go index 24bb113..0995a0e 100644 --- a/utils.go +++ b/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