| 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 |
| } |
|
|
| func GenerateUniqueFileName(dir, baseName, ext string) string { |
| counter := 1 |
| fileName := baseName + ext |
|
|
| for { |
| filePath := filepath.Join(dir, fileName) |
| _, err := os.Stat(filePath) |
| if os.IsNotExist(err) { |
| return fileName |
| } |
|
|
| counter++ |
| fileName = fmt.Sprintf("%s_%d%s", baseName, counter, ext) |
| } |
| } |
|
|