From ce244d757b68f27283336a60be33f10639ec6a3a Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Thu, 21 Jun 2018 13:50:05 +0200 Subject: [feat] add support for the helper in go --- standalone/launcher.go | 87 ++++++++++++++++++++++++++++++++++++++++++ standalone/launcher_windows.go | 73 ----------------------------------- 2 files changed, 87 insertions(+), 73 deletions(-) create mode 100644 standalone/launcher.go delete mode 100644 standalone/launcher_windows.go diff --git a/standalone/launcher.go b/standalone/launcher.go new file mode 100644 index 0000000..03178c5 --- /dev/null +++ b/standalone/launcher.go @@ -0,0 +1,87 @@ +// +build !linux +// Copyright (C) 2018 LEAP +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package bitmask + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" +) + +const ( + helperAddr = "http://localhost:7171" +) + +type launcher struct { +} + +func newLauncher() (*launcher, error) { + return &launcher{}, nil +} + +func (l *launcher) close() error { + return nil +} + +func (l *launcher) openvpnStart(flags ...string) error { + byteFlags, err := json.Marshal(flags) + if err != nil { + return err + } + return l.send("/openvpn/start", byteFlags) +} + +func (l *launcher) openvpnStop() error { + return l.send("/openvpn/stop", nil) +} + +func (l *launcher) firewallStart(gateways []gateway) error { + ipList := make([]string, len(gateways)) + for i, gw := range gateways { + ipList[i] = gw.IPAddress + } + byteIPs, err := json.Marshal(ipList) + if err != nil { + return err + } + return l.send("/firewall/start", byteIPs) +} + +func (l *launcher) firewallStop() error { + return l.send("/firewall/stop", nil) +} + +func (l *launcher) send(path string, body []byte) error { + var reader io.Reader + if body != nil { + reader = bytes.NewReader(body) + } + res, err := http.Post(helperAddr+path, "", reader) + if err != nil { + return err + } + defer res.Body.Close() + + resErr, err := ioutil.ReadAll(res.Body) + if len(resErr) > 0 { + return fmt.Errorf("Helper returned an error: %q", resErr) + } + return err +} diff --git a/standalone/launcher_windows.go b/standalone/launcher_windows.go deleted file mode 100644 index c8e79b9..0000000 --- a/standalone/launcher_windows.go +++ /dev/null @@ -1,73 +0,0 @@ -// +build windows -// Copyright (C) 2018 LEAP -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -package bitmask - -import ( - "encoding/json" - "net/textproto" - "strings" -) - -const ( - helperAddr = "localhost:7171" -) - -type launcher struct { - conn *textproto.Conn -} - -func newLauncher() (*launcher, error) { - conn, err := textproto.Dial("tcp", helperAddr) - return &launcher{conn}, err -} - -func (l *launcher) close() error { - return l.conn.Close() -} - -func (l *launcher) openvpnStart(flags ...string) error { - return l.send("openvpn_start", flags...) -} - -func (l *launcher) openvpnStop() error { - return l.send("openvpn_stop") -} - -func (l *launcher) firewallStart(gateways []gateway) error { - return nil -} - -func (l *launcher) firewallStop() error { - return nil -} - -func (l *launcher) send(cmd string, args ...string) error { - if args == nil { - args = []string{"null"} - } - command := struct { - Cmd string `json:"cmd"` - Args string `json:"args"` - }{cmd, strings.Join(args, " ")} - bytesCmd, err := json.Marshal(command) - if err != nil { - return err - } - - _, err = l.conn.Cmd(string(bytesCmd)) - return err -} -- cgit v1.2.3