From 25bd0506696e8beb30d7cb0fcc79641ea4d78b43 Mon Sep 17 00:00:00 2001 From: jerrylou Date: Thu, 16 Feb 2017 01:43:21 +0800 Subject: [PATCH] mutil domain support & split with comma Signed-off-by: jerrylou --- README.md | 5 ++--- settings.go | 33 +++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b7235b9..7131a40 100644 --- a/README.md +++ b/README.md @@ -69,10 +69,9 @@ docker pull timothyye/godns:1.0 docker run -d --name godns --restart=always \ -e EMAIL=your_dnspod_account \ -e PASSWORD=your_dnspod_password \ --e DOMAIN=your_domain \ --e SUB_DOMAIN=your_sub_domain DOCKER_IMAGE_ID +-e DOMAINS="your_domain1,your_domain2" DOCKER_IMAGE_ID ``` -## Enjoy it! \ No newline at end of file +## Enjoy it! diff --git a/settings.go b/settings.go index ba7279e..ea5e968 100644 --- a/settings.go +++ b/settings.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "strings" ) type Domain struct { @@ -41,13 +42,33 @@ func LoadSettings(configPath string, settings *Settings) error { return nil } -//LoadDomains -- Load domains from domains json -func LoadDomains(domainsJson string, domains *[]Domain) error { +//LoadDomains -- Load domains from domains string +func LoadDomains(domainsOrginStr 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 + domainsMap := make(map[string]*Domain) + domainsArray := strings.Split(domainsOrginStr, ",") + for _, host := range domainsArray { + dotCount := strings.Count(host, ".") + if dotCount < 2 { + continue + } + len := len(host) + pos := strings.Index(host, ".") + subDomain := host[0:pos] + domainName := host[pos+1 : len] + + if d, exist := domainsMap[domainName]; exist { + d.SubDomains = append(d.SubDomains, subDomain) + } else { + d := new(Domain) + d.DomainName = domainName + d.SubDomains = append(d.SubDomains, subDomain) + domainsMap[domainName] = d + } + } + + for _, d := range domainsMap { + *domains = append(*domains, *d) } return nil