From 32891c518cb3bb87f15b382dfa3bc7df8f33cb55 Mon Sep 17 00:00:00 2001 From: bel Date: Tue, 25 Oct 2022 22:40:00 -0600 Subject: [PATCH] go mod --- .config/config.go | 115 ------------------------------- .config/new.go | 161 -------------------------------------------- .config/new_test.go | 46 ------------- go.mod | 16 +++++ go.sum | 8 +++ 5 files changed, 24 insertions(+), 322 deletions(-) delete mode 100755 .config/config.go delete mode 100755 .config/new.go delete mode 100755 .config/new_test.go create mode 100644 go.mod create mode 100644 go.sum diff --git a/.config/config.go b/.config/config.go deleted file mode 100755 index fd5ee3e..0000000 --- a/.config/config.go +++ /dev/null @@ -1,115 +0,0 @@ -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 GetTCP() (string, bool) { - v := packable.NewString() - conf.Get(nsConf, flagTCP, v) - tcpAddr := v.String() - return tcpAddr, notEmpty(tcpAddr) -} - -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 -} diff --git a/.config/new.go b/.config/new.go deleted file mode 100755 index af06cf9..0000000 --- a/.config/new.go +++ /dev/null @@ -1,161 +0,0 @@ -package config - -import ( - "flag" - "io/ioutil" - "local/rproxy3/storage" - "local/rproxy3/storage/packable" - "log" - "os" - "strings" - - yaml "gopkg.in/yaml.v2" -) - -const nsConf = "configuration" -const flagPort = "p" -const flagRoutes = "r" -const flagConf = "c" -const flagCert = "crt" -const flagTCP = "tcp" -const flagKey = "key" -const flagUser = "user" -const flagPass = "pass" -const flagRate = "rate" -const flagBurst = "burst" -const flagTimeout = "timeout" -const flagRewrites = "rw" - -var conf = storage.NewMap() - -type toBind struct { - flag string - value *string -} - -type fileConf struct { - Port string `yaml:"p"` - Routes []string `yaml:"r"` - CertPath string `yaml:"crt"` - TCPPath string `yaml:"tcp"` - KeyPath string `yaml:"key"` - Username string `yaml:"user"` - Password string `yaml:"pass"` - Rate string `yaml:"rate"` - Burst string `yaml:"burst"` - Timeout string `yaml:"timeout"` - Rewrites []string `yaml:"rw"` -} - -func Init() error { - log.SetFlags(log.Ldate | log.Ltime | log.Llongfile) - log.SetFlags(log.Ltime | log.Lshortfile) - if err := fromFile(); err != nil { - return err - } - if err := fromFlags(); err != nil { - return err - } - return nil -} - -func fromFile() error { - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ContinueOnError) - defer func() { - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - }() - flag.String(flagConf, "/dev/null", "yaml config file path") - flag.Parse() - confFlag := flag.Lookup(flagConf) - if confFlag == nil || confFlag.Value.String() == "" { - return nil - } - confBytes, err := ioutil.ReadFile(confFlag.Value.String()) - if err != nil { - return err - } - var c fileConf - if err := yaml.Unmarshal(confBytes, &c); err != nil { - return err - } - if err := conf.Set(nsConf, flagPort, packable.NewString(c.Port)); err != nil { - return err - } - if err := conf.Set(nsConf, flagRoutes, packable.NewString(strings.Join(c.Routes, ","))); err != nil { - return err - } - if err := conf.Set(nsConf, flagCert, packable.NewString(c.CertPath)); err != nil { - return err - } - if err := conf.Set(nsConf, flagTCP, packable.NewString(c.TCPPath)); err != nil { - return err - } - if err := conf.Set(nsConf, flagKey, packable.NewString(c.KeyPath)); err != nil { - return err - } - if err := conf.Set(nsConf, flagUser, packable.NewString(c.Username)); err != nil { - return err - } - if err := conf.Set(nsConf, flagPass, packable.NewString(c.Password)); err != nil { - return err - } - if err := conf.Set(nsConf, flagRate, packable.NewString(c.Rate)); err != nil { - return err - } - if err := conf.Set(nsConf, flagBurst, packable.NewString(c.Burst)); err != nil { - return err - } - if err := conf.Set(nsConf, flagTimeout, packable.NewString(c.Timeout)); err != nil { - return err - } - if err := conf.Set(nsConf, flagRewrites, packable.NewString(strings.Join(c.Rewrites, ","))); err != nil { - return err - } - return nil -} - -func fromFlags() error { - binds := make([]toBind, 0) - binds = append(binds, addFlag(flagPort, "51555", "port to bind to")) - binds = append(binds, addFlag(flagConf, "", "configuration file path")) - binds = append(binds, addFlag(flagRoutes, "", "comma-separated routes to map, each as from:scheme://to.tld:port")) - binds = append(binds, addFlag(flagCert, "", "path to .crt")) - binds = append(binds, addFlag(flagTCP, "", "tcp addr")) - binds = append(binds, addFlag(flagKey, "", "path to .key")) - binds = append(binds, addFlag(flagUser, "", "basic auth username")) - binds = append(binds, addFlag(flagPass, "", "basic auth password")) - binds = append(binds, addFlag(flagRate, "100", "rate limit per second")) - binds = append(binds, addFlag(flagBurst, "100", "rate limit burst")) - binds = append(binds, addFlag(flagTimeout, "30", "seconds to wait for limiter")) - binds = append(binds, addFlag(flagRewrites, "", "comma-separated from:replace:replacement:oauth to rewrite in response bodies")) - flag.Parse() - - for _, bind := range binds { - confFlag := flag.Lookup(bind.flag) - if confFlag == nil || confFlag.Value.String() == "" { - continue - } - if err := conf.Set(nsConf, bind.flag, packable.NewString(*bind.value)); err != nil { - return err - } - } - - return nil -} - -func addFlag(key, def, help string) toBind { - def = getFlagOrDefault(key, def) - v := flag.String(key, def, help) - return toBind{ - flag: key, - value: v, - } -} - -func getFlagOrDefault(key, def string) string { - v := packable.NewString() - if err := conf.Get(nsConf, key, v); err != nil { - return def - } - return v.String() -} diff --git a/.config/new_test.go b/.config/new_test.go deleted file mode 100755 index 8e1c7b3..0000000 --- a/.config/new_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package config - -import ( - "flag" - "os" - "testing" -) - -func TestInit(t *testing.T) { - was := os.Args[:] - os.Args = []string{"program"} - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - defer func() { - os.Args = was[:] - }() - - if err := Init(); err != nil { - t.Errorf("failed to init: %v", err) - } -} - -func TestFromFile(t *testing.T) { - was := os.Args[:] - os.Args = []string{"program"} - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - defer func() { - os.Args = was[:] - }() - - if err := fromFile(); err != nil { - t.Errorf("failed from file: %v", err) - } -} - -func TestFromFlags(t *testing.T) { - was := os.Args[:] - os.Args = []string{"program"} - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - defer func() { - os.Args = was[:] - }() - - if err := fromFlags(); err != nil { - t.Errorf("failed from flags: %v", err) - } -} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..bf87262 --- /dev/null +++ b/go.mod @@ -0,0 +1,16 @@ +module local/rproxy3 + +go 1.18 + +require ( + github.com/google/uuid v1.3.0 + golang.org/x/time v0.1.0 + local/args v0.0.0-00010101000000-000000000000 + local/logb v0.0.0-00010101000000-000000000000 +) + +require gopkg.in/yaml.v2 v2.4.0 // indirect + +replace local/args => ../args + +replace local/logb => ../logb diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..179e101 --- /dev/null +++ b/go.sum @@ -0,0 +1,8 @@ +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=