1
0
mirror of https://github.com/taigrr/godns synced 2025-01-18 04:03:25 -08:00

refactor DNSPod handler

This commit is contained in:
Timothy 2017-10-09 16:27:34 +08:00
parent fd0424630a
commit cd3e7e3cb0
5 changed files with 30 additions and 22 deletions

View File

@ -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")

View File

@ -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)
}

View File

@ -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{})
}

View File

@ -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"`

View File

@ -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