mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-10-28 05:57:02 +00:00
simplify
This commit is contained in:
@@ -27,14 +27,6 @@ func ReadFile(path string) ([]byte, error) {
|
|||||||
return buf.ReadAllToBytes(reader)
|
return buf.ReadAllToBytes(reader)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReadAsset(file string) ([]byte, error) {
|
|
||||||
path, _, err := getAssetFileLocation(file)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ReadFile(path)
|
|
||||||
}
|
|
||||||
|
|
||||||
func OpenAsset(file string) (io.ReadCloser, int64, error) {
|
func OpenAsset(file string) (io.ReadCloser, int64, error) {
|
||||||
path, info, err := getAssetFileLocation(file)
|
path, info, err := getAssetFileLocation(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -44,11 +36,6 @@ func OpenAsset(file string) (io.ReadCloser, int64, error) {
|
|||||||
return r, info.Size(), err
|
return r, info.Size(), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func StatAsset(file string) (os.FileInfo, error) {
|
|
||||||
_, info, err := getAssetFileLocation(file)
|
|
||||||
return info, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func ResolveAsset(file string) (string, error) {
|
func ResolveAsset(file string) (string, error) {
|
||||||
path, _, err := getAssetFileLocation(file)
|
path, _, err := getAssetFileLocation(file)
|
||||||
return path, err
|
return path, err
|
||||||
@@ -72,21 +59,6 @@ func ReadCert(file string) ([]byte, error) {
|
|||||||
return ReadFile(platform.GetCertLocation(file))
|
return ReadFile(platform.GetCertLocation(file))
|
||||||
}
|
}
|
||||||
|
|
||||||
func CopyFile(dst string, src string) error {
|
|
||||||
bytes, err := ReadFile(src)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
f, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0o644)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
_, err = f.Write(bytes)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResolveLuaFile finds a local .lua script and returns its resolved absolute path.
|
// ResolveLuaFile finds a local .lua script and returns its resolved absolute path.
|
||||||
// Relative paths: XRAY_LOCATION_CONFDIR > XRAY_LOCATION_CONFIG > working dir > executable dir.
|
// Relative paths: XRAY_LOCATION_CONFDIR > XRAY_LOCATION_CONFIG > working dir > executable dir.
|
||||||
func ResolveLuaFile(path string) (resolved string, err error) {
|
func ResolveLuaFile(path string) (resolved string, err error) {
|
||||||
@@ -116,26 +88,20 @@ func ResolveLuaFile(path string) (resolved string, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ResolveRegularFile returns an absolute path and metadata of a regular file.
|
// ResolveRegularFile returns an absolute path and metadata of a regular file.
|
||||||
// File symlinks are resolved when possible; otherwise the original path is kept.
|
// Symlinks are resolved when possible; otherwise the original path is kept.
|
||||||
func ResolveRegularFile(path string) (string, os.FileInfo, error) {
|
func ResolveRegularFile(path string) (string, os.FileInfo, error) {
|
||||||
path, err := filepath.Abs(path)
|
path, err := filepath.Abs(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("failed to resolve file path: %w", err)
|
return "", nil, fmt.Errorf("failed to resolve file path: %w", err)
|
||||||
}
|
}
|
||||||
info, err := os.Lstat(path)
|
// Best effort: EvalSymlinks may fail when Windows junctions are involved.
|
||||||
|
if resolved, err := filepath.EvalSymlinks(path); err == nil {
|
||||||
|
path = resolved
|
||||||
|
}
|
||||||
|
info, err := os.Stat(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("failed to inspect file %q: %w", path, err)
|
return "", nil, fmt.Errorf("failed to inspect file %q: %w", path, err)
|
||||||
}
|
}
|
||||||
if info.Mode()&os.ModeSymlink != 0 {
|
|
||||||
// Best effort: EvalSymlinks may fail when junctions are involved.
|
|
||||||
if resolved, err := filepath.EvalSymlinks(path); err == nil {
|
|
||||||
path = resolved
|
|
||||||
}
|
|
||||||
info, err = os.Stat(path)
|
|
||||||
if err != nil {
|
|
||||||
return "", nil, fmt.Errorf("failed to inspect file %q: %w", path, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !info.Mode().IsRegular() {
|
if !info.Mode().IsRegular() {
|
||||||
return "", nil, fmt.Errorf("file is not a regular file: %s", path)
|
return "", nil, fmt.Errorf("file is not a regular file: %s", path)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
. "github.com/xtls/xray-core/common/platform/filesystem"
|
. "github.com/xtls/xray-core/common/platform/filesystem"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStatAssetRejectsInvalidPath(t *testing.T) {
|
func TestResolveAssetRejectsInvalidPath(t *testing.T) {
|
||||||
for _, file := range []string{
|
for _, file := range []string{
|
||||||
"",
|
"",
|
||||||
".",
|
".",
|
||||||
@@ -31,7 +31,7 @@ func TestStatAssetRejectsInvalidPath(t *testing.T) {
|
|||||||
`nested\..\geoip.dat`,
|
`nested\..\geoip.dat`,
|
||||||
filepath.Join(t.TempDir(), "geoip.dat"),
|
filepath.Join(t.TempDir(), "geoip.dat"),
|
||||||
} {
|
} {
|
||||||
if _, err := StatAsset(file); err == nil {
|
if _, err := ResolveAsset(file); err == nil {
|
||||||
t.Fatalf("expected error for %q", file)
|
t.Fatalf("expected error for %q", file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func (c *GeodataAssetConfig) Build() (*geodata.Asset, error) {
|
|||||||
if err := validateHTTPS(c.URL); err != nil {
|
if err := validateHTTPS(c.URL); err != nil {
|
||||||
return nil, errors.New("invalid geodata asset url: ", c.URL).Base(err)
|
return nil, errors.New("invalid geodata asset url: ", c.URL).Base(err)
|
||||||
}
|
}
|
||||||
if _, err := filesystem.StatAsset(c.File); err != nil {
|
if _, err := filesystem.ResolveAsset(c.File); err != nil {
|
||||||
return nil, errors.New("invalid geodata asset file: ", c.File).Base(err)
|
return nil, errors.New("invalid geodata asset file: ", c.File).Base(err)
|
||||||
}
|
}
|
||||||
return &geodata.Asset{
|
return &geodata.Asset{
|
||||||
|
|||||||
Reference in New Issue
Block a user