package config import ( "XProxy/cmd/common" "bytes" "encoding/json" "github.com/BurntSushi/toml" log "github.com/sirupsen/logrus" "gopkg.in/yaml.v3" "path" ) var defaultConfig = `# default configure file for xproxy proxy: core: xray log: warning network: bypass: - 169.254.0.0/16 - 224.0.0.0/3 - fc00::/7 - fe80::/10 - ff00::/8 asset: update: cron: "0 5 6 * * *" url: geoip.dat: https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat geosite.dat: https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat ` func toJSON(yamlConfig string) string { // YAML -> JSON var config interface{} if err := yaml.Unmarshal([]byte(yamlConfig), &config); err != nil { log.Panicf("Default config error -> %v", err) } jsonRaw, _ := json.Marshal(config) return string(jsonRaw) } func toTOML(yamlConfig string) string { // YAML -> TOML var config interface{} if err := yaml.Unmarshal([]byte(yamlConfig), &config); err != nil { log.Panicf("Default config error -> %v", err) } buf := new(bytes.Buffer) _ = toml.NewEncoder(buf).Encode(config) return buf.String() } func loadDefaultConfig(configFile string) { log.Infof("Load default configure -> %s", configFile) suffix := path.Ext(configFile) if suffix == ".json" { defaultConfig = toJSON(defaultConfig) } else if suffix == ".toml" { defaultConfig = toTOML(defaultConfig) } common.WriteFile(configFile, defaultConfig, false) }