71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
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
|
|
}
|