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