From 53b0f91873e2cd83b8e717ea8e42a78bdf084eab Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Tue, 5 Dec 2017 11:58:12 +0100 Subject: [PATCH] add env variable for config file --- common/platform/platform.go | 6 ++++++ main/main.go | 35 ++++++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/common/platform/platform.go b/common/platform/platform.go index b827cdc00..16d146045 100644 --- a/common/platform/platform.go +++ b/common/platform/platform.go @@ -70,3 +70,9 @@ func GetPluginDirectory() string { pluginDir := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(getExecuableSubDir("plugins")) return pluginDir } + +func GetConfigurationPath() string { + const name = "v2ray.location.config" + configPath := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(getExecutableDir) + return filepath.Join(configPath, "config.json") +} diff --git a/main/main.go b/main/main.go index 2755ee730..b3f533714 100644 --- a/main/main.go +++ b/main/main.go @@ -13,25 +13,40 @@ import ( "syscall" "v2ray.com/core" - + "v2ray.com/core/common/platform" _ "v2ray.com/core/main/distro/all" ) var ( - configFile string + configFile = flag.String("config", "", "Config file for V2Ray.") version = flag.Bool("version", false, "Show current version of V2Ray.") test = flag.Bool("test", false, "Test config file only, without launching V2Ray server.") format = flag.String("format", "json", "Format of input file.") plugin = flag.Bool("plugin", false, "True to load plugins.") ) -func init() { - defaultConfigFile := "" - workingDir, err := filepath.Abs(filepath.Dir(os.Args[0])) - if err == nil { - defaultConfigFile = filepath.Join(workingDir, "config.json") +func fileExists(file string) bool { + info, err := os.Stat(file) + return err == nil && !info.IsDir() +} + +func getConfigFilePath() string { + if len(*configFile) > 0 { + return *configFile } - flag.StringVar(&configFile, "config", defaultConfigFile, "Config file for this Point server.") + + if workingDir, err := os.Getwd(); err == nil { + configFile := filepath.Join(workingDir, "config.json") + if fileExists(configFile) { + return configFile + } + } + + if configFile := platform.GetConfigurationPath(); fileExists(configFile) { + return configFile + } + + return "" } func GetConfigFormat() core.ConfigFormat { @@ -46,9 +61,7 @@ func GetConfigFormat() core.ConfigFormat { } func startV2Ray() (core.Server, error) { - if len(configFile) == 0 { - return nil, newError("config file is not set") - } + configFile := getConfigFilePath() var configInput io.Reader if configFile == "stdin:" { configInput = os.Stdin