Skip to content

Commit

Permalink
Add yaml support for config files preliminary
Browse files Browse the repository at this point in the history
  • Loading branch information
shawn1m committed Dec 20, 2020
1 parent 20de808 commit e48d570
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 55 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ vendor/
overture-*
*.log

config.dev.json
config.dev.*
6 changes: 3 additions & 3 deletions core/common/edns.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import (
)

type EDNSClientSubnetType struct {
Policy string
ExternalIP string
NoCookie bool
Policy string `yaml:"policy"`
ExternalIP string `yaml:"externalIP"`
NoCookie bool `yaml:"noCookie"`
}

func SetEDNSClientSubnet(m *dns.Msg, ip string, isNoCookie bool) {
Expand Down
22 changes: 11 additions & 11 deletions core/common/upstream.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package common

type DNSUpstream struct {
Name string
Address string
Protocol string
SOCKS5Address string
Timeout int
EDNSClientSubnet *EDNSClientSubnetType
Name string `yaml:"name"`
Address string `yaml:"address"`
Protocol string `yaml:"protocol"`
SOCKS5Address string `yaml:"socks5Address"`
Timeout int `yaml:"timeout"`
EDNSClientSubnet *EDNSClientSubnetType `yaml:"ednsClientSubnet"`
TCPPoolConfig struct {
Enable bool
InitialCapacity int
MaxCapacity int
IdleTimeout int
}
Enable bool `yaml:"enable"`
InitialCapacity int `yaml:"initialCapacity"`
MaxCapacity int `yaml:"maxCapacity"`
IdleTimeout int `yaml:"idleTimeout"`
} `yaml:"tcpPoolConfig"`
}
86 changes: 46 additions & 40 deletions core/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
finderfull "github.com/shawn1m/overture/core/finder/full"
finderregex "github.com/shawn1m/overture/core/finder/regex"
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"

"github.com/shawn1m/overture/core/cache"
"github.com/shawn1m/overture/core/common"
Expand All @@ -31,48 +32,48 @@ import (
)

type Config struct {
FilePath string
BindAddress string
DebugHTTPAddress string
DohEnabled bool
PrimaryDNS []*common.DNSUpstream
AlternativeDNS []*common.DNSUpstream
OnlyPrimaryDNS bool
IPv6UseAlternativeDNS bool
AlternativeDNSConcurrent bool
IPNetworkFile struct {
Primary string
Alternative string
}
FilePath string
BindAddress string `yaml:"bindAddress"`
DebugHTTPAddress string `yaml:"debugHTTPAddress"`
DohEnabled bool `yaml:"dohEnabled"`
PrimaryDNS []*common.DNSUpstream `yaml:"primaryDNS"`
AlternativeDNS []*common.DNSUpstream `yaml:"alternativeDNS"`
OnlyPrimaryDNS bool `yaml:"onlyPrimaryDNS"`
IPv6UseAlternativeDNS bool `yaml:"iPv6UseAlternativeDNS"`
AlternativeDNSConcurrent bool `yaml:"alternativeDNSConcurrent"`
WhenPrimaryDNSAnswerNoneUse string `yaml:"whenPrimaryDNSAnswerNoneUse"`
IPNetworkFile struct {
Primary string `yaml:"primary"`
Alternative string `yaml:"alternative"`
} `yaml:"ipNetworkFile"`
DomainFile struct {
Primary string
Alternative string
PrimaryMatcher string
AlternativeMatcher string
Matcher string
}
Primary string `yaml:"primary"`
Alternative string `yaml:"alternative"`
PrimaryMatcher string `yaml:"primaryMatcher"`
AlternativeMatcher string `yaml:"alternativeMatcher"`
Matcher string `yaml:"matcher"`
} `yaml:"domainFile"`
HostsFile struct {
HostsFile string
Finder string
}
MinimumTTL int
DomainTTLFile string
CacheSize int
RejectQType []uint16

DomainTTLMap map[string]uint32
DomainPrimaryList matcher.Matcher
DomainAlternativeList matcher.Matcher
WhenPrimaryDNSAnswerNoneUse string
IPNetworkPrimarySet *common.IPSet
IPNetworkAlternativeSet *common.IPSet
Hosts *hosts.Hosts
Cache *cache.Cache
HostsFile string `yaml:"hostsFile"`
Finder string `yaml:"finder"`
} `yaml:"hostsFile"`
MinimumTTL int `yaml:"minimumTTL"`
DomainTTLFile string `yaml:"domainTTLFile"`
CacheSize int `yaml:"cacheSize"`
RejectQType []uint16 `yaml:"rejectQType"`

DomainTTLMap map[string]uint32
DomainPrimaryList matcher.Matcher
DomainAlternativeList matcher.Matcher
IPNetworkPrimarySet *common.IPSet
IPNetworkAlternativeSet *common.IPSet
Hosts *hosts.Hosts
Cache *cache.Cache
}

// New config with json file and do some other initiate works
func NewConfig(configFile string) *Config {
config := parseJson(configFile)
config := parseConfigFile(configFile)
config.FilePath = configFile

config.DomainTTLMap = getDomainTTLMap(config.DomainTTLFile)
Expand Down Expand Up @@ -107,21 +108,26 @@ func NewConfig(configFile string) *Config {
return config
}

func parseJson(path string) *Config {
func parseConfigFile(path string) *Config {
b, err := ioutil.ReadFile(path)
if err != nil {
log.Fatalf("Failed to read config file: %s", err)
os.Exit(1)
}

j := new(Config)
err = json.Unmarshal(b, j)
config := new(Config)
if strings.HasSuffix(path, "yaml") || strings.HasSuffix(path, "yml") {
err = yaml.Unmarshal(b, config)
} else {
err = json.Unmarshal(b, config)
}

if err != nil {
log.Fatalf("Failed to parse config file: %s", err)
os.Exit(1)
}

return j
return config
}

func getDomainTTLMap(file string) map[string]uint32 {
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ require (
github.com/sirupsen/logrus v1.6.0
golang.org/x/net v0.0.0-20200707034311-ab3426394381
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 // indirect
gopkg.in/yaml.v2 v2.3.0
)

0 comments on commit e48d570

Please sign in to comment.