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

muti domain support

Signed-off-by: jerrylou <gunsluo@gmail.com>
This commit is contained in:
jerrylou 2017-02-15 19:12:09 +08:00
parent 5d6f76b136
commit 63f39bad94
3 changed files with 72 additions and 35 deletions

View File

@ -1,11 +1,17 @@
{
"email": "",
"password": "",
"login_token": "",
"domain": "",
"sub_domain": "",
"ip_url": "http://members.3322.org/dyndns/getip",
"log_path":"./godns.log",
"log_size":16,
"log_num":3
"email": "example@gmail.com",
"password": "",
"login_token": "",
"domains": [{
"domain_name":"example.com",
"sub_domains":["www","test"]
},{
"domain_name":"example2.com",
"sub_domains":["www","test"]
}
],
"ip_url": "http://members.3322.org/dyndns/getip",
"log_path":"./godns.log",
"log_size":16,
"log_num":3
}

View File

@ -36,13 +36,17 @@ func main() {
Email: os.Getenv("EMAIL"),
Password: os.Getenv("PASSWORD"),
LoginToken: os.Getenv("TOKEN"),
Domain: os.Getenv("DOMAIN"),
SubDomain: os.Getenv("SUB_DOMAIN"),
IPUrl: "http://members.3322.org/dyndns/getip",
LogPath: "./godns.log",
LogSize: 16,
LogNum: 3,
}
if err := LoadDomains(os.Getenv("DOMAINS"), &configuration.Domains); err != nil {
fmt.Println(err.Error())
log.Println(err.Error())
os.Exit(1)
}
} else {
//Load settings from configurations file
if err := LoadSettings(*optConf, &configuration); err != nil {
@ -79,9 +83,18 @@ func dnsLoop() {
}
}()
for _, domain := range configuration.Domains {
go DomainLoop(&domain)
}
select {}
}
func DomainLoop(domain *Domain) {
for {
domainID := getDomain(configuration.Domain)
domainID := getDomain(domain.DomainName)
if domainID == -1 {
continue
@ -93,22 +106,24 @@ func dnsLoop() {
log.Println("get_currentIP:", err)
continue
}
subDomainID, ip := getSubDomain(domainID, configuration.SubDomain)
if subDomainID == "" || ip == "" {
log.Println("sub_domain:", subDomainID, ip)
continue
}
log.Println("currentIp is:", currentIP)
//Continue to check the IP of sub-domain
if len(ip) > 0 && !strings.Contains(currentIP, ip) {
log.Println("Start to update record IP...")
updateIP(domainID, subDomainID, configuration.SubDomain, currentIP)
} else {
log.Println("Current IP is same as domain IP, no need to update...")
for _, subDomain := range domain.SubDomains {
subDomainID, ip := getSubDomain(domainID, subDomain)
if subDomainID == "" || ip == "" {
log.Printf("domain: %s.%s subDomainID: %s ip: %s\n", subDomain, domain.DomainName, subDomainID, ip)
continue
}
//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)
} else {
log.Println("%s.%s Current IP is same as domain IP, no need to update...\n", subDomain, domain.DomainName)
}
}
//Interval is 5 minutes

View File

@ -6,17 +6,21 @@ import (
"io/ioutil"
)
type Domain struct {
DomainName string `json:"domain_name"`
SubDomains []string `json:"sub_domains"`
}
//Settings struct
type Settings struct {
Email string `json:"email"`
Password string `json:"password"`
LoginToken string `json:"login_token"`
Domain string `json:"domain"`
SubDomain string `json:"sub_domain"`
IPUrl string `json:"ip_url"`
LogPath string `json:"log_path"`
LogSize int `json:"log_size"`
LogNum int `json:"log_num"`
Email string `json:"email"`
Password string `json:"password"`
LoginToken string `json:"login_token"`
Domains []Domain `json:"domains"`
IPUrl string `json:"ip_url"`
LogPath string `json:"log_path"`
LogSize int `json:"log_size"`
LogNum int `json:"log_num"`
}
//LoadSettings -- Load settings from config file
@ -36,3 +40,15 @@ func LoadSettings(configPath string, settings *Settings) error {
return nil
}
//LoadDomains -- Load domains from domains json
func LoadDomains(domainsJson string, domains *[]Domain) error {
err := json.Unmarshal([]byte(domainsJson), domains)
if err != nil {
fmt.Println("Error occurs while unmarshal domains json, please make sure domains json config correct!")
return err
}
return nil
}