mirror of
https://github.com/taigrr/godns
synced 2025-01-18 04:03:25 -08:00
79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"strings"
|
|
)
|
|
|
|
//Domain struct
|
|
type Domain struct {
|
|
DomainName string `json:"domain_name"`
|
|
SubDomains []string `json:"sub_domains"`
|
|
}
|
|
|
|
//Settings struct
|
|
type Settings struct {
|
|
Type string `json:"type"`
|
|
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"`
|
|
Socks5Proxy string `json:"socks5_proxy"`
|
|
}
|
|
|
|
//LoadSettings -- Load settings from config file
|
|
func LoadSettings(configPath string, settings *Settings) error {
|
|
//LoadSettings from config file
|
|
file, err := ioutil.ReadFile(configPath)
|
|
if err != nil {
|
|
fmt.Println("Error occurs while reading config file, please make sure config file exists!")
|
|
return err
|
|
}
|
|
|
|
err = json.Unmarshal(file, settings)
|
|
if err != nil {
|
|
fmt.Println("Error occurs while unmarshal config file, please make sure config file correct!")
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
//LoadDomains -- Load domains from domains string
|
|
func LoadDomains(domainsOrginStr string, domains *[]Domain) error {
|
|
|
|
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
|
|
}
|