Files

58 lines
1.4 KiB
Go

package main
import (
"fmt"
"regexp"
"strconv"
"strings"
)
func validateDomain(domain string) error {
if domain == "" {
return fmt.Errorf("domain cannot be empty")
}
domainRegex := regexp.MustCompile(`^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$`)
if !domainRegex.MatchString(domain) {
return fmt.Errorf("invalid domain format: %s", domain)
}
return nil
}
func validatePath(path string) error {
if path == "" {
return fmt.Errorf("path cannot be empty")
}
if strings.Contains(path, "..") {
return fmt.Errorf("path cannot contain parent directory references (..)")
}
if !strings.HasPrefix(path, "/") {
return fmt.Errorf("path must start with /")
}
return nil
}
func validatePort(port string) error {
if port == "" {
return fmt.Errorf("port cannot be empty")
}
p, err := strconv.Atoi(port)
if err != nil {
return fmt.Errorf("invalid port number: %s", port)
}
if p < 1 || p > 65535 {
return fmt.Errorf("port must be between 1 and 65535, got: %d", p)
}
return nil
}
func validateHeaderName(name string) error {
if name == "" {
return fmt.Errorf("header name cannot be empty")
}
headerRegex := regexp.MustCompile("^[a-zA-Z0-9!#$%&'*+\\-\\.^_`\\|~]+$")
if !headerRegex.MatchString(name) {
return fmt.Errorf("invalid header name format: %s (must be valid HTTP token characters only)", name)
}
return nil
}