Files
v2ray_simple/proxy/config_simple.go
T
e1732a364fed 70a24e45f3 修订Makefile,代码,文档; 添加-sap命令行参数,通过命令行配置apiServer密码
有了-sap参数之后,开启apiServer就不需要 配置文件了。

移除根目录的 Makefile,因为用不到
2022-05-06 08:28:09 +08:00

108 lines
2.6 KiB
Go

package proxy
import (
"encoding/json"
"io/ioutil"
"log"
"net/url"
"os"
"github.com/e1732a364fed/v2ray_simple/httpLayer"
"github.com/e1732a364fed/v2ray_simple/netLayer"
"github.com/e1732a364fed/v2ray_simple/utils"
)
//极简配置模式;只支持json
type SimpleConf struct {
ListenUrl string `json:"listen"`
DialUrl string `json:"dial"`
Route []*netLayer.RuleConf `json:"route"`
Fallbacks []*httpLayer.FallbackConf `json:"fallbacks"`
MyCountryISO_3166 string `json:"mycountry"`
}
func LoadSimpleConfigFile(fileNamePath string) (config SimpleConf, hasError bool, E utils.ErrInErr) {
if cf, err := os.Open(fileNamePath); err == nil {
defer cf.Close()
bs, _ := ioutil.ReadAll(cf)
if err = json.Unmarshal(bs, &config); err != nil {
hasError = true
E = utils.ErrInErr{
ErrDesc: "can not parse config file ",
ErrDetail: err,
Data: fileNamePath,
}
}
return
} else {
hasError = true
E = utils.ErrInErr{ErrDesc: "can't open config file", ErrDetail: err}
return
}
}
func LoadSimpleConfigFromStr(str string) (config SimpleConf, hasE bool, E utils.ErrInErr) {
if err := json.Unmarshal([]byte(str), &config); err != nil {
E = utils.ErrInErr{ErrDesc: "can not parse config ", ErrDetail: err}
hasE = true
}
return
}
func loadSimpleConf_byFile(fpath string) (simpleConf SimpleConf, mainFallback *httpLayer.ClassicFallback, err error) {
//默认认为所有其他后缀的都是json格式,因为有时会用 server.json.vless 这种写法
// 默认所有json格式的文件都为 极简模式
var hasE bool
simpleConf, hasE, err = LoadSimpleConfigFile(fpath)
if hasE {
log.Printf("can not load simple config file: %s\n", err.Error())
return
} else {
err = nil
}
if simpleConf.Fallbacks != nil {
mainFallback = httpLayer.NewClassicFallbackFromConfList(simpleConf.Fallbacks)
}
if simpleConf.DialUrl == "" {
simpleConf.DialUrl = DirectURL
}
return
}
//listenURL 不可为空。dialURL如果为空,会自动被设为 DirectURL
func loadSimpleConf_byUrl(listenURL, dialURL string) (simpleConf SimpleConf, err error) {
if dialURL == "" {
dialURL = DirectURL
}
_, err = url.Parse(listenURL)
if err != nil {
log.Printf("listenURL given but invalid %s %s\n", listenURL, err.Error())
return
}
simpleConf = SimpleConf{
ListenUrl: listenURL,
}
_, err = url.Parse(dialURL)
if err != nil {
log.Printf("dialURL given but invalid %s %s\n", dialURL, err.Error())
return
}
simpleConf.DialUrl = dialURL
return
}