goo/scripted.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
}