Initial commit: Caddy MCP Server
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user