From 770bc14548a6a48ccbc8be0f0583122cf1dc6f6e Mon Sep 17 00:00:00 2001 From: Bluesaxorcist Date: Mon, 21 Oct 2019 15:16:49 -0500 Subject: added dialer to the modes and removed unneccessary code --- common/options.go | 39 ++++++++++++++++++++++++++++++++++++--- common/pt_extras/pt_extras.go | 13 +++++++------ 2 files changed, 43 insertions(+), 9 deletions(-) (limited to 'common') diff --git a/common/options.go b/common/options.go index 9c73616..f0ededf 100644 --- a/common/options.go +++ b/common/options.go @@ -3,7 +3,8 @@ package options import ( "encoding/json" "errors" - "fmt" + "github.com/OperatorFoundation/shapeshifter-dispatcher/common/log" + interconv "github.com/mufti1/interconv/package" "strings" ) @@ -11,14 +12,46 @@ func ParseOptions(s string) (map[string]interface{}, error) { var result map[string]interface{} if len(s) == 0 { - return nil, errors.New("Empty options") + return map[string]interface{}{}, nil } decoder := json.NewDecoder(strings.NewReader(s)) if err := decoder.Decode(&result); err != nil { - fmt.Errorf("Error decoding JSON %q", err) + log.Errorf("Error decoding JSON %q", err) return nil, err } return result, nil } + +func ParseServerOptions(s string) (params map[string]map[string]interface{}, err error) { + result := make(map[string]map[string]interface{}) + + if len(s) == 0 { + return result, nil + } + + decoder := json.NewDecoder(strings.NewReader(s)) + if err := decoder.Decode(&result); err != nil { + log.Errorf("Error decoding JSON %q", err) + return nil, err + } + + return result, nil +} + +func CoerceToString(futureString interface{}) (*string, error) { + var result string + + switch futureString.(type) { + case string: + var icerr error + result, icerr = interconv.ParseString(futureString) + if icerr != nil { + return nil, icerr + } + return &result, nil + default: + return nil, errors.New("unable to coerce empty interface to string") + } +} \ No newline at end of file diff --git a/common/pt_extras/pt_extras.go b/common/pt_extras/pt_extras.go index a41f4f7..a04859e 100644 --- a/common/pt_extras/pt_extras.go +++ b/common/pt_extras/pt_extras.go @@ -33,6 +33,7 @@ import ( "github.com/OperatorFoundation/shapeshifter-dispatcher/common/log" "github.com/OperatorFoundation/shapeshifter-dispatcher/transports" "github.com/OperatorFoundation/shapeshifter-transports/transports/Optimizer" + "golang.org/x/net/proxy" "net" "net/url" "os" @@ -46,19 +47,19 @@ import ( func ptEnvError(msg string) error { line := []byte(fmt.Sprintf("ENV-ERROR %s\n", msg)) - pt.Stdout.Write(line) + _, _ = pt.Stdout.Write(line) return errors.New(msg) } func ptProxyError(msg string) error { line := []byte(fmt.Sprintf("PROXY-ERROR %s\n", msg)) - pt.Stdout.Write(line) + _, _ = pt.Stdout.Write(line) return errors.New(msg) } func PtProxyDone() { line := []byte("PROXY DONE\n") - pt.Stdout.Write(line) + _, _ = pt.Stdout.Write(line) } func PtIsClient() (bool, error) { @@ -174,7 +175,7 @@ func PtShouldExitOnStdinClose() bool { return os.Getenv("TOR_PT_EXIT_ON_STDIN_CLOSE") == "1" } -func ArgsToDialer(target string, name string, args map[string]interface{}) (Optimizer.Transport, error) { +func ArgsToDialer(target string, name string, args map[string]interface{}, dialer proxy.Dialer) (Optimizer.Transport, error) { switch name { //case "obfs2": // transport := obfs2.NewObfs2Transport() @@ -182,7 +183,7 @@ func ArgsToDialer(target string, name string, args map[string]interface{}) (Opti // return dialer, nil case "obfs4": //refactor starts here - transport, err := transports.ParseArgsObfs4(args, target) + transport, err := transports.ParseArgsObfs4(args, target, dialer) if err != nil { log.Errorf("Could not parse options %s", err.Error()) return nil, err @@ -198,7 +199,7 @@ func ArgsToDialer(target string, name string, args map[string]interface{}) (Opti return transport, nil } case "Optimizer": - transport, err := transports.ParseArgsOptimizer(args) + transport, err := transports.ParseArgsOptimizer(args, dialer) if err != nil { log.Errorf("Could not parse options %s", err.Error()) return nil, err -- cgit v1.2.3