platform.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package platform
  2. import (
  3. "os"
  4. "path/filepath"
  5. "strconv"
  6. "strings"
  7. )
  8. type EnvFlag struct {
  9. Name string
  10. AltName string
  11. }
  12. func (f EnvFlag) GetValue(defaultValue func() string) string {
  13. if v, found := os.LookupEnv(f.Name); found {
  14. return v
  15. }
  16. if len(f.AltName) > 0 {
  17. if v, found := os.LookupEnv(f.AltName); found {
  18. return v
  19. }
  20. }
  21. return defaultValue()
  22. }
  23. func (f EnvFlag) GetValueAsInt(defaultValue int) int {
  24. useDefaultValue := false
  25. s := f.GetValue(func() string {
  26. useDefaultValue = true
  27. return ""
  28. })
  29. if useDefaultValue {
  30. return defaultValue
  31. }
  32. v, err := strconv.ParseInt(s, 10, 32)
  33. if err != nil {
  34. return defaultValue
  35. }
  36. return int(v)
  37. }
  38. func NormalizeEnvName(name string) string {
  39. return strings.Replace(strings.ToUpper(strings.TrimSpace(name)), ".", "_", -1)
  40. }
  41. func GetAssetLocation(file string) string {
  42. assetPath := EnvFlag{Name: "v2ray.location.asset"}.GetValue(func() string {
  43. exec, err := os.Executable()
  44. if err != nil {
  45. return ""
  46. }
  47. return filepath.Dir(exec)
  48. })
  49. return filepath.Join(assetPath, file)
  50. }