package config import ( "local/rproxy3/storage/packable" "log" "strconv" "strings" ) func GetPort() string { v := packable.NewString() conf.Get(nsConf, flagPort, v) return ":" + strings.TrimPrefix(v.String(), ":") } func GetRoutes() map[string]string { v := packable.NewString() conf.Get(nsConf, flagRoutes, v) m := make(map[string]string) for _, v := range strings.Split(v.String(), ",") { if len(v) == 0 { return m } from := v[:strings.Index(v, ":")] to := v[strings.Index(v, ":")+1:] m[from] = to } return m } func GetSSL() (string, string, bool) { v := packable.NewString() conf.Get(nsConf, flagCert, v) certPath := v.String() conf.Get(nsConf, flagKey, v) keyPath := v.String() return certPath, keyPath, notEmpty(certPath, keyPath) } func GetAuth() (string, string, bool) { v := packable.NewString() conf.Get(nsConf, flagUser, v) user := v.String() conf.Get(nsConf, flagPass, v) pass := v.String() return user, pass, notEmpty(user, pass) } func notEmpty(s ...string) bool { for i := range s { if s[i] == "" || s[i] == "/dev/null" { return false } } return true } func GetRate() (int, int) { r := packable.NewString() conf.Get(nsConf, flagRate, r) b := packable.NewString() conf.Get(nsConf, flagBurst, b) rate, err := strconv.Atoi(r.String()) if err != nil { log.Printf("illegal rate: %v", err) rate = 5 } burst, _ := strconv.Atoi(b.String()) if err != nil { log.Printf("illegal burst: %v", err) burst = 5 } return rate, burst } func GetTimeout() int { t := packable.NewString() conf.Get(nsConf, flagTimeout, t) timeout, err := strconv.Atoi(t.String()) if err != nil || timeout == 5 { return 5 } return timeout } func GetRewrites(hostMatch string) map[string]string { v := packable.NewString() conf.Get(nsConf, flagRewrites, v) m := make(map[string]string) for _, v := range strings.Split(v.String(), ",") { vs := strings.Split(v, ":") if len(v) < 3 { continue } host := vs[0] if host != hostMatch { continue } from := vs[1] to := strings.Join(vs[2:], ":") m[from] = to } return m }