This commit is contained in:
58
internal/httpapp/validation_helpers.go
Normal file
58
internal/httpapp/validation_helpers.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package httpapp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// parseSizeString parses a human-readable size string to bytes
|
||||
func (a *App) parseSizeString(sizeStr string) (uint64, error) {
|
||||
sizeStr = strings.TrimSpace(strings.ToUpper(sizeStr))
|
||||
if sizeStr == "" {
|
||||
return 0, fmt.Errorf("size cannot be empty")
|
||||
}
|
||||
|
||||
// Extract number and unit
|
||||
var numStr string
|
||||
var unit string
|
||||
|
||||
for i, r := range sizeStr {
|
||||
if r >= '0' && r <= '9' {
|
||||
numStr += string(r)
|
||||
} else {
|
||||
unit = sizeStr[i:]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if numStr == "" {
|
||||
return 0, fmt.Errorf("invalid size format: no number found")
|
||||
}
|
||||
|
||||
num, err := strconv.ParseUint(numStr, 10, 64)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("invalid size number: %w", err)
|
||||
}
|
||||
|
||||
// Convert to bytes based on unit
|
||||
multiplier := uint64(1)
|
||||
switch unit {
|
||||
case "":
|
||||
multiplier = 1
|
||||
case "K", "KB":
|
||||
multiplier = 1024
|
||||
case "M", "MB":
|
||||
multiplier = 1024 * 1024
|
||||
case "G", "GB":
|
||||
multiplier = 1024 * 1024 * 1024
|
||||
case "T", "TB":
|
||||
multiplier = 1024 * 1024 * 1024 * 1024
|
||||
case "P", "PB":
|
||||
multiplier = 1024 * 1024 * 1024 * 1024 * 1024
|
||||
default:
|
||||
return 0, fmt.Errorf("invalid size unit: %s (allowed: K, M, G, T, P)", unit)
|
||||
}
|
||||
|
||||
return num * multiplier, nil
|
||||
}
|
||||
Reference in New Issue
Block a user