From 51709637a256a3e3687ad093e9d1bb3750b926e9 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Tue, 9 Oct 2018 14:25:58 -0700 Subject: [PATCH] getinfo support for status/bootstrap-phase --- cmd_getinfo.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 cmd_getinfo.go diff --git a/cmd_getinfo.go b/cmd_getinfo.go new file mode 100644 index 0000000..055e96f --- /dev/null +++ b/cmd_getinfo.go @@ -0,0 +1,45 @@ +package asaur + +import ( + "fmt" + "strings" +) + +// GetStatus returns tor control port info (ex: "status/bootstrap-phase") +func (c *Conn) GetInfo(arg string) ([]string, error) { + cmd := fmt.Sprintf("GETINFO %v", arg) + resp, err := c.Request(cmd) + if err != nil { + return nil, err + } + return resp.Data, nil +} + +func GetInfo(torControlAddress string, torControlSocketType string, authentication string, arg string) ([]string, error) { + c, err := Dial(torControlSocketType, torControlAddress) + if err != nil { + return nil, err + } + defer c.Close() + + if err := c.Authenticate(authentication); err != nil { + return nil, err + } + + return c.GetInfo(arg) +} + +func ParseBootstrapPhase(data []string) map[string]string { + // TODO: Fix "5" which is status/bootstrap-phase specific hack to avoid "" parsing + lines := strings.SplitN(data[0], " ", 5) + var resps = make(map[string]string) + for _, l := range lines { + kv := strings.Split(l, "=") + if len(kv) == 2 { + kv[1] = strings.TrimPrefix(kv[1], "\"") + kv[1] = strings.TrimSuffix(kv[1], "\"") + resps[kv[0]] = kv[1] + } + } + return resps +}