package main import ( "errors" "fmt" "strconv" ) // Scripted proxy errors var ErrConversion = errors.New("port is not a number") var ErrDuplicate = errors.New("duplicate entry") type ProxyError struct { Domain string Port string Err error } func (e *ProxyError) Error() string { return fmt.Sprintf("Proxy for %s:%s: %s", e.Domain, e.Port, e.Err.Error()) } func (e *ProxyError) Unwrap() error { return e.Err } func conversionError(domain, port string) *ProxyError { return &ProxyError{domain, port, ErrConversion} } func duplicateError(domain, port string) *ProxyError { return &ProxyError{domain, port, ErrDuplicate} } type Proxy struct { Domain string Port int } var proxyList map[int]string func ScriptedInit() { proxyList = make(map[int]string) } func GetProxy() ([]Proxy) { var p []Proxy for port, domain := range proxyList { p = append(p, Proxy{domain, port}) } return p } func AddProxy(domain, port string) (error) { p, err := strconv.Atoi(port) if err != nil { return conversionError(domain, port) } conflict, exists := proxyList[p] if exists == true { fmt.Println("Error: Conflicting proxy settings:") fmt.Printf(" %s:%d\n", conflict, p) fmt.Printf(" %s:%d\n", domain, p) return duplicateError(domain, port) } proxyList[p] = domain return nil }