mirror of
				https://github.com/cloudnativelabs/kube-router.git
				synced 2025-11-04 12:41:04 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package nat
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"strconv"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// PartParser parses and validates the specified string (data) using the specified template
 | 
						|
// e.g. ip:public:private -> 192.168.0.1:80:8000
 | 
						|
// DEPRECATED: do not use, this function may be removed in a future version
 | 
						|
func PartParser(template, data string) (map[string]string, error) {
 | 
						|
	// ip:public:private
 | 
						|
	var (
 | 
						|
		templateParts = strings.Split(template, ":")
 | 
						|
		parts         = strings.Split(data, ":")
 | 
						|
		out           = make(map[string]string, len(templateParts))
 | 
						|
	)
 | 
						|
	if len(parts) != len(templateParts) {
 | 
						|
		return nil, fmt.Errorf("Invalid format to parse. %s should match template %s", data, template)
 | 
						|
	}
 | 
						|
 | 
						|
	for i, t := range templateParts {
 | 
						|
		value := ""
 | 
						|
		if len(parts) > i {
 | 
						|
			value = parts[i]
 | 
						|
		}
 | 
						|
		out[t] = value
 | 
						|
	}
 | 
						|
	return out, nil
 | 
						|
}
 | 
						|
 | 
						|
// ParsePortRange parses and validates the specified string as a port-range (8000-9000)
 | 
						|
func ParsePortRange(ports string) (uint64, uint64, error) {
 | 
						|
	if ports == "" {
 | 
						|
		return 0, 0, fmt.Errorf("Empty string specified for ports.")
 | 
						|
	}
 | 
						|
	if !strings.Contains(ports, "-") {
 | 
						|
		start, err := strconv.ParseUint(ports, 10, 16)
 | 
						|
		end := start
 | 
						|
		return start, end, err
 | 
						|
	}
 | 
						|
 | 
						|
	parts := strings.Split(ports, "-")
 | 
						|
	start, err := strconv.ParseUint(parts[0], 10, 16)
 | 
						|
	if err != nil {
 | 
						|
		return 0, 0, err
 | 
						|
	}
 | 
						|
	end, err := strconv.ParseUint(parts[1], 10, 16)
 | 
						|
	if err != nil {
 | 
						|
		return 0, 0, err
 | 
						|
	}
 | 
						|
	if end < start {
 | 
						|
		return 0, 0, fmt.Errorf("Invalid range specified for the Port: %s", ports)
 | 
						|
	}
 | 
						|
	return start, end, nil
 | 
						|
}
 |