mirror of https://github.com/v2ray/v2ray-core
				
				
				
			
		
			
				
	
	
		
			93 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
package platform // import "v2ray.com/core/common/platform"
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"strconv"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
type EnvFlag struct {
 | 
						|
	Name    string
 | 
						|
	AltName string
 | 
						|
}
 | 
						|
 | 
						|
func NewEnvFlag(name string) EnvFlag {
 | 
						|
	return EnvFlag{
 | 
						|
		Name:    name,
 | 
						|
		AltName: NormalizeEnvName(name),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (f EnvFlag) GetValue(defaultValue func() string) string {
 | 
						|
	if v, found := os.LookupEnv(f.Name); found {
 | 
						|
		return v
 | 
						|
	}
 | 
						|
	if len(f.AltName) > 0 {
 | 
						|
		if v, found := os.LookupEnv(f.AltName); found {
 | 
						|
			return v
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return defaultValue()
 | 
						|
}
 | 
						|
 | 
						|
func (f EnvFlag) GetValueAsInt(defaultValue int) int {
 | 
						|
	useDefaultValue := false
 | 
						|
	s := f.GetValue(func() string {
 | 
						|
		useDefaultValue = true
 | 
						|
		return ""
 | 
						|
	})
 | 
						|
	if useDefaultValue {
 | 
						|
		return defaultValue
 | 
						|
	}
 | 
						|
	v, err := strconv.ParseInt(s, 10, 32)
 | 
						|
	if err != nil {
 | 
						|
		return defaultValue
 | 
						|
	}
 | 
						|
	return int(v)
 | 
						|
}
 | 
						|
 | 
						|
func NormalizeEnvName(name string) string {
 | 
						|
	return strings.Replace(strings.ToUpper(strings.TrimSpace(name)), ".", "_", -1)
 | 
						|
}
 | 
						|
 | 
						|
func getExecutableDir() string {
 | 
						|
	exec, err := os.Executable()
 | 
						|
	if err != nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	return filepath.Dir(exec)
 | 
						|
}
 | 
						|
 | 
						|
func getExecutableSubDir(dir string) func() string {
 | 
						|
	return func() string {
 | 
						|
		return filepath.Join(getExecutableDir(), dir)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func GetAssetLocation(file string) string {
 | 
						|
	const name = "v2ray.location.asset"
 | 
						|
	assetPath := NewEnvFlag(name).GetValue(getExecutableDir)
 | 
						|
	return filepath.Join(assetPath, file)
 | 
						|
}
 | 
						|
 | 
						|
func GetPluginDirectory() string {
 | 
						|
	const name = "v2ray.location.plugin"
 | 
						|
	pluginDir := NewEnvFlag(name).GetValue(getExecutableSubDir("plugins"))
 | 
						|
	return pluginDir
 | 
						|
}
 | 
						|
 | 
						|
func GetConfigurationPath() string {
 | 
						|
	const name = "v2ray.location.config"
 | 
						|
	configPath := NewEnvFlag(name).GetValue(getExecutableDir)
 | 
						|
	return filepath.Join(configPath, "config.json")
 | 
						|
}
 | 
						|
 | 
						|
// GetConfDirPath reads "v2ray.location.confdir"
 | 
						|
func GetConfDirPath() string {
 | 
						|
	const name = "v2ray.location.confdir"
 | 
						|
	configPath := NewEnvFlag(name).GetValue(func() string { return "" })
 | 
						|
	return configPath
 | 
						|
}
 |