|
package utils |
|
|
|
import ( |
|
"fmt" |
|
"os" |
|
"path/filepath" |
|
"strings" |
|
) |
|
|
|
func ExistsInPath(path string, s string) bool { |
|
_, err := os.Stat(filepath.Join(path, s)) |
|
return err == nil |
|
} |
|
|
|
func InTrustedRoot(path string, trustedRoot string) error { |
|
for path != "/" { |
|
path = filepath.Dir(path) |
|
if path == trustedRoot { |
|
return nil |
|
} |
|
} |
|
return fmt.Errorf("path is outside of trusted root") |
|
} |
|
|
|
|
|
func VerifyPath(path, basePath string) error { |
|
c := filepath.Clean(filepath.Join(basePath, path)) |
|
return InTrustedRoot(c, filepath.Clean(basePath)) |
|
} |
|
|
|
|
|
func SanitizeFileName(fileName string) string { |
|
|
|
cleanName := filepath.Clean(fileName) |
|
|
|
baseName := filepath.Base(cleanName) |
|
|
|
safeName := strings.ReplaceAll(baseName, "..", "") |
|
return safeName |
|
} |
|
|