commit cb61a037fe5031b4f6bdfd0172b75698d70bc84c Author: arnef Date: Thu Jun 17 08:18:45 2021 +0200 🎉 ssh proxy systray diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7773828 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dist/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..59df5f3 --- /dev/null +++ b/Makefile @@ -0,0 +1,39 @@ +define INFO_PLIST + + + + + LSUIElement + 1 + CFBundleExecutable + sshproxytray + + +endef +export INFO_PLIST + +ifeq ($(OS),Windows_NT) + OS = win +else + UNAME := $(shell uname -s) + ifeq ($(UNAME),Darwin) + OS = mac + else ifeq ($(UNAME),Linux) + OS = linux + else + $(error OS not supported by this Makefile) + endif +endif + + +build: build-$(OS) + +install: install-$(OS) + +build-mac: + mkdir -p dist/SshProxyTray.app/Contents/{MacOS,Resources} + echo $$INFO_PLIST > dist/SshProxyTray.app/Contents/Info.plist + go build -o dist/SshProxyTray.app/Contents/MacOS/sshproxytray main.go + +install-mac: + cp -r dist/SshProxyTray.app /Applications \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..cfccb1c --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# SSH Proxy Tray + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..08a701b --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module git.arnef.de/arnef/sshproxytray + +go 1.16 + +require github.com/getlantern/systray v1.1.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..f37ccf3 --- /dev/null +++ b/go.sum @@ -0,0 +1,24 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= +github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= +github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So= +github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 h1:guBYzEaLz0Vfc/jv0czrr2z7qyzTOGC9hiQ0VC+hKjk= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o= +github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc= +github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= +github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA= +github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= +github.com/getlantern/systray v1.1.0 h1:U0wCEqseLi2ok1fE6b88gJklzriavPJixZysZPkZd/Y= +github.com/getlantern/systray v1.1.0/go.mod h1:AecygODWIsBquJCJFop8MEQcJbWFfw/1yWbVabNgpCM= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 h1:YTzHMGlqJu67/uEo1lBv0n3wBXhXNeUbB1XfN2vmTm0= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/icon/shield-off.png b/icon/shield-off.png new file mode 100644 index 0000000..0870146 Binary files /dev/null and b/icon/shield-off.png differ diff --git a/icon/shield-off.svg b/icon/shield-off.svg new file mode 100644 index 0000000..18692dd --- /dev/null +++ b/icon/shield-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon/shield.png b/icon/shield.png new file mode 100644 index 0000000..5894e5e Binary files /dev/null and b/icon/shield.png differ diff --git a/icon/shield.svg b/icon/shield.svg new file mode 100644 index 0000000..c7c4841 --- /dev/null +++ b/icon/shield.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..db3d83c --- /dev/null +++ b/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "os" + "os/exec" + + _ "embed" + + "github.com/getlantern/systray" +) + +//go:embed icon/shield.png +var activeIcon []byte + +//go:embed icon/shield-off.png +var inactiveIcon []byte + +func main() { + systray.Run(onReady, onExit) +} + +func onReady() { + systray.SetIcon(inactiveIcon) + connect := systray.AddMenuItem("Connect", "") + quit := systray.AddMenuItem("Quit", "") + + var cmd *exec.Cmd + + for { + select { + case <-quit.ClickedCh: + if cmd != nil { + cmd.Process.Kill() + } + systray.Quit() + case <-connect.ClickedCh: + if cmd == nil { + cmd = exec.Command("ssh", "-N", "proxytray") + systray.SetIcon(activeIcon) + connect.SetTitle("Disconnect") + cmd.Stderr = os.Stdout + cmd.Stdout = os.Stdout + cmd.Stdin = os.Stdin + cmd.Start() + go func() { + cmd.Wait() + systray.SetIcon(inactiveIcon) + connect.SetTitle("Connect") + cmd = nil + }() + } else { + cmd.Process.Kill() + } + } + } + +} + +func onExit() { + +}