From c70b9937df09801b59d5ddc8c62f0e3e741869bc Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Fri, 7 Jan 2011 01:30:17 -0800 Subject: [PATCH] ui-macos/*: "a series of unfortunate events." Just kidding. This is a squash of a whole bunch of unlabeled temporary commits that I produced over the last couple of weeks while writing a UI for MacOS while riding on airplanes and sitting in airports. So long, batch of useless commits! --- ui-macos/.gitignore | 8 + ui-macos/Info.plist | 40 + ui-macos/MainMenu.xib | 2232 ++++++++++++++++++++++++++++++++ ui-macos/UserDefaults.plist | 10 + ui-macos/all.do | 1 + ui-macos/app.icns | Bin 0 -> 110343 bytes ui-macos/askpass.py | 31 + ui-macos/bits/.gitignore | 1 + ui-macos/bits/PkgInfo | 1 + ui-macos/bits/run | 3 + ui-macos/bits/runpython.c | 14 + ui-macos/bits/runpython.do | 5 + ui-macos/chicken-tiny-bw.png | Bin 0 -> 821 bytes ui-macos/chicken-tiny-err.png | Bin 0 -> 789 bytes ui-macos/chicken-tiny.png | Bin 0 -> 810 bytes ui-macos/clean.do | 4 + ui-macos/debug.app.do | 15 + ui-macos/default.app.do | 28 + ui-macos/default.app.tar.gz.do | 5 + ui-macos/default.app.zip.do | 5 + ui-macos/default.nib.do | 2 + ui-macos/dist.do | 1 + ui-macos/main.py | 307 +++++ ui-macos/models.py | 108 ++ ui-macos/my.py | 62 + ui-macos/prime-sudo.sh | 4 + ui-macos/sources.list.do | 14 + ui-macos/sshuttle | 1 + ui-macos/stupid.py | 14 + 29 files changed, 2916 insertions(+) create mode 100644 ui-macos/.gitignore create mode 100644 ui-macos/Info.plist create mode 100644 ui-macos/MainMenu.xib create mode 100644 ui-macos/UserDefaults.plist create mode 100644 ui-macos/all.do create mode 100644 ui-macos/app.icns create mode 100755 ui-macos/askpass.py create mode 100644 ui-macos/bits/.gitignore create mode 100644 ui-macos/bits/PkgInfo create mode 100755 ui-macos/bits/run create mode 100644 ui-macos/bits/runpython.c create mode 100644 ui-macos/bits/runpython.do create mode 100644 ui-macos/chicken-tiny-bw.png create mode 100644 ui-macos/chicken-tiny-err.png create mode 100644 ui-macos/chicken-tiny.png create mode 100644 ui-macos/clean.do create mode 100644 ui-macos/debug.app.do create mode 100644 ui-macos/default.app.do create mode 100644 ui-macos/default.app.tar.gz.do create mode 100644 ui-macos/default.app.zip.do create mode 100644 ui-macos/default.nib.do create mode 100644 ui-macos/dist.do create mode 100644 ui-macos/main.py create mode 100644 ui-macos/models.py create mode 100644 ui-macos/my.py create mode 100755 ui-macos/prime-sudo.sh create mode 100644 ui-macos/sources.list.do create mode 120000 ui-macos/sshuttle create mode 100644 ui-macos/stupid.py diff --git a/ui-macos/.gitignore b/ui-macos/.gitignore new file mode 100644 index 0000000..1daa15a --- /dev/null +++ b/ui-macos/.gitignore @@ -0,0 +1,8 @@ +*.pyc +*~ +/*.nib +/debug.app +/sources.list +/Sshuttle VPN.app +/*.tar.gz +/*.zip diff --git a/ui-macos/Info.plist b/ui-macos/Info.plist new file mode 100644 index 0000000..65c0486 --- /dev/null +++ b/ui-macos/Info.plist @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + Sshuttle VPN + CFBundleExecutable + run + CFBundleIconFile + app.icns + CFBundleIdentifier + ca.apenwarr.Sshuttle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sshuttle VPN + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.0.0 + CFBundleSignature + ???? + CFBundleVersion + 0.0.0 + LSUIElement + 1 + LSHasLocalizedDisplayName + + NSAppleScriptEnabled + + NSHumanReadableCopyright + GNU LGPL Version 2 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/ui-macos/MainMenu.xib b/ui-macos/MainMenu.xib new file mode 100644 index 0000000..1dbb94b --- /dev/null +++ b/ui-macos/MainMenu.xib @@ -0,0 +1,2232 @@ + + + + 1060 + 10H574 + 762 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 762 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + + NSApplication + + + + FirstResponder + + + NSApplication + + + 3 + 2 + {{157, 116}, {611, 369}} + 1886913536 + Sshuttle VPN Preferences + NSWindow + + View + + {1.79769e+308, 1.79769e+308} + {213, 107} + + + 256 + + YES + + + 12 + {{-8, -10}, {627, 373}} + + 2 + + YES + + 1 + + + 256 + + YES + + + 268 + {{17, 17}, {25, 23}} + + 2 + YES + + 67239424 + 134217728 + + + LucidaGrande + 13 + 1044 + + + -2033958657 + 134 + + NSImage + NSAddTemplate + + + + 400 + 75 + + + + + 268 + {{41, 17}, {25, 23}} + + 2 + YES + + 67239424 + 134217728 + + + + -2033958657 + 134 + + NSImage + NSRemoveTemplate + + + + 400 + 75 + + + + + 268 + + YES + + + 2304 + + YES + + + 256 + {224, 282} + + 2 + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + + YES + + 22 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + Connected + + LucidaGrande + 11 + 3100 + + + 6 + System + headerColor + + 3 + MQA + + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67239424 + 0 + Check + + + 1215582719 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + YES + + + + 196 + 40 + 1000 + + 75628096 + 2048 + Server + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 67239488 + 272631808 + Text + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 1 + YES + + + + 3 + 2 + + 6 + System + controlBackgroundColor + + + + 6 + System + gridColor + + 3 + MC41AA + + + 19 + 48234496 + + + 0 + 15 + 0 + YES + 0 + + + {{1, 1}, {223, 282}} + + + 2 + + + 4 + + + + -2147483392 + {{143, 1}, {15, 274}} + + 2 + + _doScroller: + 0.99636363636363634 + + + + -2147483392 + {{-100, -100}, {157, 15}} + + 2 + YES + 1 + + _doScroller: + 0.91812865497076024 + + + {{17, 40}, {225, 284}} + + + 2 + 658 + + + + QSAAAEEgAABBqAAAQagAAA + + + + 268 + {{296, 254}, {273, 18}} + + 2 + YES + + -2080244224 + 0 + Automatically detect remote hostnames + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{341, 292}, {249, 22}} + + 2 + YES + + -1804468671 + 272630848 + + + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + + + + 268 + {{273, 185}, {320, 26}} + + 2 + YES + + -2076049856 + 2048 + + + 112869631 + 129 + + + 400 + 75 + + + Choose one + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Item 2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item 3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + + + + 268 + {{261, 294}, {75, 17}} + + 2 + YES + + 68288064 + 272630784 + SSH Server: + + + + + + + + + 268 + {{261, 217}, {105, 17}} + + 2 + YES + + 68288064 + 272630784 + Network routes: + + + + + + + + + 268 + {{276, 40}, {25, 23}} + + 2 + YES + + 67239424 + 134217728 + + + + -2033958657 + 134 + + + + 400 + 75 + + + + + 268 + {{300, 40}, {25, 23}} + + 2 + YES + + 67239424 + 134217728 + + + + -2033958657 + 134 + + + + 400 + 75 + + + + + 268 + + YES + + + 2304 + + YES + + + 256 + {312, 95} + + 2 + YES + + + 256 + {312, 17} + + 2 + + + + + -2147483392 + {{224, 0}, {16, 17}} + + 2 + + + YES + + 134 + 40 + 1000 + + 75628096 + 2048 + Subnet + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 337772096 + 2048 + 255.255.255.255 + + + + + + 3 + YES + YES + + + + 172 + 40 + 1000 + + 75628096 + 2048 + Width + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 17 + 1379926016 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 17}, {312, 95}} + + + 2 + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + 2 + + _doScroller: + 0.8529411764705882 + + + + -2147483392 + {{1, 75}, {141, 15}} + + 2 + 1 + + _doScroller: + 0.98734177215189878 + + + + 2304 + + YES + + + {{1, 0}, {312, 17}} + + + 2 + + + 4 + + + + {{276, 63}, {314, 113}} + + + 2 + 562 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + {{10, 33}, {607, 327}} + 2 + + SSH Servers + + + + + 2 + + + 256 + + YES + + + 268 + {{189, 287}, {177, 29}} + + 2 + YES + + 604110336 + 0 + Start Sshuttle at login + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{189, 256}, {270, 29}} + + 2 + YES + + -2080244224 + 0 + Auto-reconnect if disconnected + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{10, 33}, {607, 327}} + 2 + + Options + + + + + Log Messages + + + 256 + + YES + + + 256 + + YES + + + 2304 + + YES + + + 2322 + {596, 14} + + 2 + + + + + + + + + + YES + + + 134 + + + + 596 + 1 + + + 10497 + 0 + + + + YES + + YES + NSBackgroundColor + NSColor + + + YES + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + YES + + YES + NSColor + NSCursor + NSUnderline + + + YES + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + + 6 + {600, 1e+07} + {223, 11} + + + + {{1, 1}, {596, 310}} + + + 2 + + + + {4, -5} + 1 + + 4 + + + + 256 + {{597, 1}, {15, 310}} + + 2 + + _doScroller: + 1 + 0.85256409645080566 + + + + 256 + {{1, 311}, {596, 15}} + + 2 + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{-3, -3}, {613, 327}} + + + 2 + 50 + + + + + + {{10, 33}, {607, 327}} + + 2 + + Log Messages + + + + + + + 0 + YES + + YES + + + + + {611, 369} + + + subviews + + + + + + + YES + + fromTop + fade + + YES + filter + subtype + type + + + + 2 + + {{0, 0}, {800, 578}} + {213, 129} + {1.79769e+308, 1.79769e+308} + + + YES + + YES + YES + YES + YES + YES + + + SshuttleController + + + + YES + autoReconnect + + YES + + + SshuttleApp + + + + YES + host + autoHosts + autoNets + nets + netsHidden + connected + + SshuttleServer + YES + + YES + YES + YES + YES + YES + + + + YES + subnet + width + + SshuttleNet + YES + + YES + YES + YES + YES + YES + + + + + YES + + + startAtLoginField + + + + 250 + + + + prefsWindow + + + + 254 + + + + value: values.startAtLogin + + + + + + value: values.startAtLogin + value + values.startAtLogin + 2 + + + 309 + + + + delegate + + + + 312 + + + + add: + + + + 337 + + + + remove: + + + + 338 + + + + routingField + + + + 435 + + + + value: values.autoReconnect + + + + + + value: values.autoReconnect + value + values.autoReconnect + 2 + + + 480 + + + + value: arrangedObjects.host + + + + + + value: arrangedObjects.host + value + arrangedObjects.host + + YES + + YES + NSConditionallySetsEditable + NSNullPlaceholder + + + YES + + Untitled + + + 2 + + + 495 + + + + selectedIndex: selection.autoNets + + + + + + selectedIndex: selection.autoNets + selectedIndex + selection.autoNets + + NSNoSelectionPlaceholder + + + 2 + + + 501 + + + + value: selection.autoHosts + + + + + + value: selection.autoHosts + value + selection.autoHosts + + NSNoSelectionPlaceholder + + + 2 + + + 502 + + + + value: selection.host + + + + + + value: selection.host + value + selection.host + + YES + + YES + NSAllowsEditingMultipleValuesSelection + NSContinuouslyUpdatesValue + NSNoSelectionPlaceholder + NSNullPlaceholder + NSValidatesImmediately + + + YES + + + Click [+] to add a new server + username@hostname.domain.com + + + + 2 + + + 503 + + + + value: arrangedObjects.connected + + + + + + value: arrangedObjects.connected + value + arrangedObjects.connected + 2 + + + 508 + + + + add: + + + + 525 + + + + remove: + + + + 526 + + + + contentArray: selection.nets + + + + + + contentArray: selection.nets + contentArray + selection.nets + 2 + + + 528 + + + + hidden: selection.netsHidden + + + + + + hidden: selection.netsHidden + hidden + selection.netsHidden + + NSNoSelectionPlaceholder + + + 2 + + + 535 + + + + hidden: selection.netsHidden + + + + + + hidden: selection.netsHidden + hidden + selection.netsHidden + + NSNoSelectionPlaceholder + + + 2 + + + 538 + + + + hidden: selection.netsHidden + + + + + + hidden: selection.netsHidden + hidden + selection.netsHidden + + NSNoSelectionPlaceholder + + + 2 + + + 541 + + + + value: arrangedObjects.subnet + + + + + + value: arrangedObjects.subnet + value + arrangedObjects.subnet + + YES + + YES + NSNullPlaceholder + NSValidatesImmediately + + + YES + a.b.c.d + + + + 2 + + + 543 + + + + value: arrangedObjects.width + + + + + + value: arrangedObjects.width + value + arrangedObjects.width + + NSValidatesImmediately + + + 2 + + + 544 + + + + contentArray: servers + + + + + + contentArray: servers + contentArray + servers + + NSDeletesObjectsOnRemove + + + 2 + + + 545 + + + + serversController + + + + 547 + + + + logField + + + + 549 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 21 + + + YES + + + + Window + + + 2 + + + YES + + + + + + 207 + + + SshuttleController + + + -3 + + + Application + + + 233 + + + YES + + + + + + + + 234 + + + YES + + + + + + 235 + + + YES + + + + + + 236 + + + YES + + + + + + + 237 + + + YES + + + + + + + + + + + + + + + + 242 + + + YES + + + + + + 243 + + + + + 224 + + + YES + + + + + + Servers + + + 225 + + + + + 226 + + + + + 227 + + + YES + + + + + + + 229 + + + YES + + + + + + 275 + + + YES + + + + + + 276 + + + + + 277 + + + YES + + + + + + 278 + + + + + 300 + + + YES + + + + + + 301 + + + YES + + + + + + 302 + + + YES + + + + + + + + 303 + + + + + 304 + + + + + 305 + + + + + 307 + + + + + 310 + + + + + 334 + + + ServersArray + + + 370 + + + YES + + + + + + 371 + + + + + 372 + + + YES + + + + + + 373 + + + + + 424 + + + YES + + + + + + 425 + + + YES + + + + + + 426 + + + YES + + + + + + + + 427 + + + + + 428 + + + + + 429 + + + + + 430 + + + RouteList + + + 431 + + + YES + + + + + + 432 + + + + + 433 + + + YES + + + + + + 434 + + + + + 476 + + + YES + + + + + + 477 + + + + + 486 + + + + + 504 + + + YES + + + + + + 506 + + + + + 509 + + + YES + + + + + + + Nets + + + 510 + + + + + 511 + + + + + 512 + + + YES + + + + + + + 513 + + + + + 514 + + + YES + + + + + + 515 + + + YES + + + + + + 516 + + + + + 517 + + + + + 518 + + + YES + + + + + + 519 + + + YES + + + + + + 520 + + + + + 521 + + + + + 524 + + + NetsArray + + + + + YES + + YES + -3.IBPluginDependency + 2.IBPluginDependency + 2.ImportedFromIB2 + 207.ImportedFromIB2 + 21.IBEditorWindowLastContentRect + 21.IBPluginDependency + 21.IBWindowTemplateEditedContentRect + 21.ImportedFromIB2 + 21.NSWindowTemplate.visibleAtLaunch + 21.windowTemplate.hasMinSize + 21.windowTemplate.minSize + 224.IBAttributePlaceholdersKey + 224.IBPluginDependency + 225.IBPluginDependency + 226.IBPluginDependency + 227.IBPluginDependency + 229.IBPluginDependency + 233.IBAttributePlaceholdersKey + 233.IBPluginDependency + 233.IBViewIntegration.shadowBlurRadius + 233.IBViewIntegration.shadowColor + 233.IBViewIntegration.shadowOffsetHeight + 233.IBViewIntegration.shadowOffsetWidth + 234.IBPluginDependency + 235.IBPluginDependency + 236.IBPluginDependency + 237.IBPluginDependency + 242.IBAttributePlaceholdersKey + 242.IBPluginDependency + 243.IBPluginDependency + 275.IBAttributePlaceholdersKey + 275.IBPluginDependency + 276.IBPluginDependency + 277.IBAttributePlaceholdersKey + 277.IBPluginDependency + 278.IBPluginDependency + 300.IBPluginDependency + 301.IBPluginDependency + 302.IBPluginDependency + 303.IBPluginDependency + 304.IBPluginDependency + 305.IBPluginDependency + 307.IBPluginDependency + 334.IBPluginDependency + 370.IBAttributePlaceholdersKey + 370.IBPluginDependency + 371.IBPluginDependency + 372.IBAttributePlaceholdersKey + 372.IBPluginDependency + 373.IBPluginDependency + 424.IBAttributePlaceholdersKey + 424.IBPluginDependency + 425.IBPluginDependency + 426.IBPluginDependency + 427.IBPluginDependency + 428.IBPluginDependency + 429.IBPluginDependency + 430.IBPluginDependency + 431.IBPluginDependency + 432.IBPluginDependency + 433.IBPluginDependency + 434.IBPluginDependency + 476.IBAttributePlaceholdersKey + 476.IBPluginDependency + 477.IBPluginDependency + 486.IBPluginDependency + 506.IBPluginDependency + 509.IBPluginDependency + 510.IBPluginDependency + 511.IBPluginDependency + 512.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 515.IBPluginDependency + 516.IBPluginDependency + 517.IBPluginDependency + 518.IBAttributePlaceholdersKey + 518.IBPluginDependency + 519.IBAttributePlaceholdersKey + 519.IBPluginDependency + 520.IBPluginDependency + 521.IBPluginDependency + 524.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + {{498, 573}, {611, 369}} + com.apple.InterfaceBuilder.CocoaPlugin + {{498, 573}, {611, 369}} + + + + {213, 107} + + ToolTip + + ToolTip + + The list of configured servers. To add a new one, click the [+] button below. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + InitialTabViewItem + + InitialTabViewItem + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + 1 + MC4xMDg2OTU2NTIyIDAuMTA4Njk1NjUyMiAwLjEwODY5NTY1MjIgMC42NwA + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Do you want to make the Sshuttle menu icon visible immediately after logging in, or only if you launch Sshuttle manually? + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Add a server + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Delete the current server + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Search for server names on the remote end and add them to your computer's /etc/hosts file. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + The name of the remote ssh server, in username@hostname:port format. username@ and :port are optional. The remote server needs to have at least python 2.3 installed, but does not need a copy of sshuttle. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Choose which network traffic should be routed over the VPN. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + If your connection to the server dies, do you want Sshuttle to retry the connection right away? + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Add a server + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Delete the current server + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 549 + + + + YES + + FirstResponder + NSObject + + IBUserSource + + + + + SshuttleApp + NSObject + + IBUserSource + + + + + SshuttleController + NSObject + + YES + + YES + logField + prefsWindow + routingField + serversController + startAtLoginField + + + YES + id + id + id + id + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + + 3 + + YES + + YES + NSAddTemplate + NSMenuCheckmark + NSMenuMixedState + NSRemoveTemplate + NSSwitch + + + YES + {8, 8} + {9, 8} + {7, 2} + {8, 8} + {15, 15} + + + + diff --git a/ui-macos/UserDefaults.plist b/ui-macos/UserDefaults.plist new file mode 100644 index 0000000..7467434 --- /dev/null +++ b/ui-macos/UserDefaults.plist @@ -0,0 +1,10 @@ + + + + + startAtLogin + + autoReconnect + + + diff --git a/ui-macos/all.do b/ui-macos/all.do new file mode 100644 index 0000000..24cec45 --- /dev/null +++ b/ui-macos/all.do @@ -0,0 +1 @@ +redo-ifchange debug.app dist diff --git a/ui-macos/app.icns b/ui-macos/app.icns new file mode 100644 index 0000000000000000000000000000000000000000..620b97776ec2abb96b8360c5ab6cbe4a0254b85a GIT binary patch literal 110343 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 literal 0 HcmV?d00001 diff --git a/ui-macos/askpass.py b/ui-macos/askpass.py new file mode 100755 index 0000000..55e98ee --- /dev/null +++ b/ui-macos/askpass.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +import sys, os, re, subprocess + +prompt = ' '.join(sys.argv[1:2]).replace('"', "'") + +if 'yes/no' in prompt: + print "yes" + sys.exit(0) + +script=""" + tell application "Finder" + activate + display dialog "%s" \ + with title "Sshuttle SSH Connection" \ + default answer "" \ + with icon caution \ + with hidden answer + end tell +""" % prompt + +p = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE) +out = p.stdout.read() +rv = p.wait() +if rv: + # if they press the cancel button, it returns nonzero + sys.exit(1) +g = re.match("text returned:(.*), button returned:.*", out) +if not g: + sys.exit(2) +print g.group(1) + diff --git a/ui-macos/bits/.gitignore b/ui-macos/bits/.gitignore new file mode 100644 index 0000000..3e2c2f8 --- /dev/null +++ b/ui-macos/bits/.gitignore @@ -0,0 +1 @@ +/runpython diff --git a/ui-macos/bits/PkgInfo b/ui-macos/bits/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/ui-macos/bits/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/ui-macos/bits/run b/ui-macos/bits/run new file mode 100755 index 0000000..e63750f --- /dev/null +++ b/ui-macos/bits/run @@ -0,0 +1,3 @@ +#!/bin/sh +cd "$(dirname "$0")" +exec ./runpython ../Resources/main.py diff --git a/ui-macos/bits/runpython.c b/ui-macos/bits/runpython.c new file mode 100644 index 0000000..2d982f5 --- /dev/null +++ b/ui-macos/bits/runpython.c @@ -0,0 +1,14 @@ +/* + * This rather pointless program acts like the python interpreter, except + * it's intended to sit inside a MacOS .app package, so that its argv[0] + * will point inside the package. + * + * NSApplicationMain() looks for Info.plist using the path in argv[0], which + * goes wrong if your interpreter is /usr/bin/python. + */ +#include + +int main(int argc, char **argv) +{ + return Py_Main(argc, argv); +} \ No newline at end of file diff --git a/ui-macos/bits/runpython.do b/ui-macos/bits/runpython.do new file mode 100644 index 0000000..1e3b88a --- /dev/null +++ b/ui-macos/bits/runpython.do @@ -0,0 +1,5 @@ +exec >&2 +redo-ifchange runpython.c +gcc -Wall -o $3 runpython.c \ + -I/usr/include/python2.5 \ + -lpython2.5 diff --git a/ui-macos/chicken-tiny-bw.png b/ui-macos/chicken-tiny-bw.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef418d8b7b3bac47654eec95ea557198be4346f GIT binary patch literal 821 zcmV-51Iqk~P)H{>_t)3gH)^$-Z`(Gy-7btVP)ecIYVk&+u>s%` z04x9x&(F_yn$6~NZ*MP=QbGs;#u$PiaDCrjYqeTy#u#X=!8wNz0)!A4V*mhYnl_7~ z`0deX;Ogq?tK;Kigkgv*%TN>r;y8ws5}i&5j4>EvkYyRNEJL2>NYfNqmcbZtq|sCxj0D5cN#_xHa!I5=2YSy_48bzKM{ptS}e1VRW%DNz&!(ljmV_4&5bGep2YQY}#zt zeIEdL{-y^{a!?+|ar}$c8c`JeR20Quw@vytv(bE!=C?{k00000NkvXXu0mjfj-rhn literal 0 HcmV?d00001 diff --git a/ui-macos/chicken-tiny-err.png b/ui-macos/chicken-tiny-err.png new file mode 100644 index 0000000000000000000000000000000000000000..29845134b4fc045ecb814ee86c1e06b3a7d4a361 GIT binary patch literal 789 zcmV+w1M2*VP)-goCs-+P_OyqRR2I87RAZ6p+NA%Y;q?+-*N z1eaBCp&K`@S}EO$2yV2Xh%N*{BvK0%8<6;sB zB0=NX-ox+zJBM>Ec3ze-W=tvNyZK#HLneP`H;Ed}*6PRB4uQ(a<)+@Nym;oh=7BMt z87rTyTjxu^^&f11IA-sJ=s3>g(bC?zYHw(yUwDQ<_V7dQbF%EZF~(H&#u$6GQbFMD zei&N^aU3_cgC44ko_uy`{=RViN9HScAj)AfyO&?N(D~B3_&vVoJ@hBVejh(=;AAH) zZ~4jL+F9T89{VSt@A(fL_sdtm*2pQ0d_-Pmtw-ea#3yUDa`k1UR6uQa@ddFFu@S+R zt7w@8dCLi|`>uQFZ)4wmB&eM~r;$00oJPqEMn3TOM8!hkFpwW?T&eo>$k){fUoiaI%eqUq)eovLtuJSm?V~Ax)kD$L zeO4tU(n1Q{+z5z7NYJb~rTE=w<@qR%uWdrN9=}ma4I5)d>&4PjRqTDQHy4k%Iwb_s zbf6HX5Mu`B7&%e)k2O}BZ*Dc+?ngQ9F8APJFL=kZa{m1{7N&|ss*RQ_h2W2~c{RJ7 zM87PquDrh?|KF(~F1tGl;P?C(`Zt#2EbUloz=|AHE0 z#`jn2ulTkaA9u?K7NjfP{`$2n%UU~zW?6PiEGn_Wx_ootyCg~1+TG4i+u8mFN}nH0 T1cqW300000NkvXXu0mjfW>0+s literal 0 HcmV?d00001 diff --git a/ui-macos/chicken-tiny.png b/ui-macos/chicken-tiny.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d9ab0c89f3c5baf8b1830e9a3a2f23b0c6b9f2 GIT binary patch literal 810 zcmV+_1J(SAP)2sRH%#Z&w!!wl2<*>{m0@{g?igA`rCfF8Vs1LTM{^H9784rx6kZyHNdRl+B>Z_{n;hLd9;4mkzb7Y}(}EYv5#76M&OdpoAHH}UT?&P| z`7LO2+S$`hxl|gELZjs{pl2AS9+(UNOv&>>sBd%2((N5xUK5%m;ubKlL$!;m= zqEiUK@c};o4jmNffqrwiT4DJpG`f1b`RUPv9D!3_vQt4}l;6gaF(c5C-+Mb0sP)zIP*&$v|s3 z^F`hldTf2ENZhhC(rJ+E0cEES3kgIKVB2*l3;-Dc)wzVYe%C*yl>YAvN{c4SB*Kr3 zXl-kYaj>nGcODrDMy!;E>(&8cfad^#SMSEHnfl)=bpBI099x`}mKf6*H>huLApR?7 zNNwo}vZ)n{)heWCr<-OTKa&%-qn}r7`5OTFf6=cMkFotHhSS#;91&c-5uU9$;tv4g zd;5({CesjA8isU|U4AW2Z>Ov0060tSXN^E2Y*^Qt81sIEQj}@b)`|#&*?Z#6`gma;s5{u07*qoM6N<$f{p5RssI20 literal 0 HcmV?d00001 diff --git a/ui-macos/clean.do b/ui-macos/clean.do new file mode 100644 index 0000000..44b7229 --- /dev/null +++ b/ui-macos/clean.do @@ -0,0 +1,4 @@ +exec >&2 +find -name '*~' | xargs rm -f +rm -rf *.app *.zip *.tar.gz +rm -f bits/runpython *.nib sources.list diff --git a/ui-macos/debug.app.do b/ui-macos/debug.app.do new file mode 100644 index 0000000..28bda45 --- /dev/null +++ b/ui-macos/debug.app.do @@ -0,0 +1,15 @@ +redo-ifchange bits/runpython MainMenu.nib +rm -rf debug.app +mkdir debug.app debug.app/Contents +cd debug.app/Contents +ln -s ../.. Resources +ln -s ../.. English.lproj +ln -s ../../Info.plist . +ln -s ../../app.icns . + +mkdir MacOS +cd MacOS +ln -s ../../../bits/runpython ../../../bits/run . + +cd ../../.. +redo-ifchange $(find debug.app -type f) diff --git a/ui-macos/default.app.do b/ui-macos/default.app.do new file mode 100644 index 0000000..f0b1eec --- /dev/null +++ b/ui-macos/default.app.do @@ -0,0 +1,28 @@ +TOP=$PWD +redo-ifchange sources.list +redo-ifchange Info.plist bits/runpython bits/run \ + $(while read name newname; do echo "$name"; done &2 +IFS=" +" +redo-ifchange $1.app +tar -czf $3 $1.app/ diff --git a/ui-macos/default.app.zip.do b/ui-macos/default.app.zip.do new file mode 100644 index 0000000..c12e2d2 --- /dev/null +++ b/ui-macos/default.app.zip.do @@ -0,0 +1,5 @@ +exec >&2 +IFS=" +" +redo-ifchange $1.app +zip -q -r $3 $1.app/ diff --git a/ui-macos/default.nib.do b/ui-macos/default.nib.do new file mode 100644 index 0000000..afa91f4 --- /dev/null +++ b/ui-macos/default.nib.do @@ -0,0 +1,2 @@ +redo-ifchange $1.xib +ibtool --compile $3 $1.xib diff --git a/ui-macos/dist.do b/ui-macos/dist.do new file mode 100644 index 0000000..8487c6f --- /dev/null +++ b/ui-macos/dist.do @@ -0,0 +1 @@ +redo-ifchange "Sshuttle VPN.app.zip" "Sshuttle VPN.app.tar.gz" diff --git a/ui-macos/main.py b/ui-macos/main.py new file mode 100644 index 0000000..69e32df --- /dev/null +++ b/ui-macos/main.py @@ -0,0 +1,307 @@ +import sys, os, pty +from AppKit import * +import my, models + +NET_ALL=0 +NET_AUTO=1 +NET_MANUAL=2 + +def sshuttle_args(host, auto_nets, auto_hosts, nets): + argv = [my.bundle_path('sshuttle/sshuttle', ''), '-v', '-r', host] + assert(argv[0]) + if auto_nets: + argv.append('--auto-nets') + if auto_hosts: + argv.append('--auto-hosts') + argv += nets + return argv + + +class _Callback(NSObject): + def initWithFunc_(self, func): + self = super(_Callback, self).init() + self.func = func + return self + def func_(self, obj): + return self.func(obj) + + +class Callback: + def __init__(self, func): + self.obj = _Callback.alloc().initWithFunc_(func) + self.sel = self.obj.func_ + + +class Runner: + def __init__(self, argv, logfunc, promptfunc): + print 'in __init__' + self.id = argv + self.rv = None + self.pid = None + self.fd = None + self.logfunc = logfunc + self.promptfunc = promptfunc + self.buf = '' + print 'will run: %r' % argv + pid,fd = pty.fork() + if pid == 0: + # child + try: + os.execvp(argv[0], argv) + except Exception, e: + sys.stderr.write('failed to start: %r\n' % e) + raise + finally: + os._exit(42) + # parent + self.pid = pid + self.file = NSFileHandle.alloc()\ + .initWithFileDescriptor_closeOnDealloc_(fd, True) + self.cb = Callback(self.gotdata) + NSNotificationCenter.defaultCenter()\ + .addObserver_selector_name_object_(self.cb.obj, self.cb.sel, + NSFileHandleDataAvailableNotification, self.file) + self.file.waitForDataInBackgroundAndNotify() + + def __del__(self): + self.wait() + + def _try_wait(self, options): + if self.rv == None and self.pid > 0: + pid,code = os.waitpid(self.pid, options) + if pid == self.pid: + if os.WIFEXITED(code): + self.rv = os.WEXITSTATUS(code) + else: + self.rv = -os.WSTOPSIG(code) + print 'wait_result: %r' % self.rv + return self.rv + + def wait(self): + return self._try_wait(0) + + def poll(self): + return self._try_wait(os.WNOHANG) + + def kill(self): + assert(self.pid > 0) + print 'killing: pid=%r rv=%r' % (self.pid, self.rv) + if self.rv == None: + os.kill(self.pid, 15) + + def gotdata(self, notification): + print 'gotdata!' + d = str(self.file.availableData()) + if d: + self.logfunc(d) + self.buf = self.buf + d + self.buf = self.buf[-4096:] + if self.buf.strip().endswith(':'): + lastline = self.buf.rstrip().split('\n')[-1] + resp = self.promptfunc(lastline) + add = ' (response)\n' + self.buf += add + self.logfunc(add) + self.file.writeData_(my.Data(resp + '\n')) + self.file.waitForDataInBackgroundAndNotify() + self.poll() + print 'gotdata done!' + + +class SshuttleApp(NSObject): + def initialize(self): + d = my.PList('UserDefaults') + my.Defaults().registerDefaults_(d) + + +class SshuttleController(NSObject): + # Interface builder outlets + startAtLoginField = objc.IBOutlet() + routingField = objc.IBOutlet() + prefsWindow = objc.IBOutlet() + serversController = objc.IBOutlet() + logField = objc.IBOutlet() + + servers = [] + conns = {} + + def _connect(self, server): + host = server.host() + print 'connecting %r' % host + self.fill_menu() + def logfunc(msg): + print 'log! (%d bytes)' % len(msg) + self.logField.textStorage()\ + .appendAttributedString_(NSAttributedString.alloc()\ + .initWithString_(msg)) + def promptfunc(prompt): + print 'prompt! %r' % prompt + return 'scs' + nets_mode = server.autoNets() + if nets_mode == NET_MANUAL: + manual_nets = ["%s/%d" % (i.subnet(), i.width()) + for i in server.nets()] + elif nets_mode == NET_ALL: + manual_nets = ['0/0'] + else: + manual_nets = [] + conn = Runner(sshuttle_args(host, + auto_nets = nets_mode == NET_AUTO, + auto_hosts = server.autoHosts(), + nets = manual_nets), + logfunc=logfunc, promptfunc=promptfunc) + self.conns[host] = conn + + def _disconnect(self, server): + host = server.host() + print 'disconnecting %r' % host + self.fill_menu() + conn = self.conns.get(host) + if conn: + conn.kill() + + @objc.IBAction + def cmd_connect(self, sender): + server = sender.representedObject() + server.setConnected_(True) + + @objc.IBAction + def cmd_disconnect(self, sender): + server = sender.representedObject() + server.setConnected_(False) + + @objc.IBAction + def cmd_show(self, sender): + self.prefsWindow.makeKeyAndOrderFront_(self) + NSApp.activateIgnoringOtherApps_(True) + + @objc.IBAction + def cmd_quit(self, sender): + NSApp.performSelector_withObject_afterDelay_(NSApp.terminate_, + None, 0.0) + + def fill_menu(self): + menu = self.menu + menu.removeAllItems() + + def additem(name, func, obj): + it = menu.addItemWithTitle_action_keyEquivalent_(name, None, "") + it.setRepresentedObject_(obj) + it.setTarget_(self) + it.setAction_(func) + + any_conn = False + err = None + if len(self.servers): + for i in self.servers: + host = i.host() + if not host: + additem('Connect Untitled', None, i) + elif i.connected(): + any_conn = i + additem('Disconnect %s' % host, self.cmd_disconnect, i) + else: + additem('Connect %s' % host, self.cmd_connect, i) + else: + additem('No servers defined yet', None, None) + + menu.addItem_(NSMenuItem.separatorItem()) + additem('Preferences...', self.cmd_show, None) + additem('Quit Sshuttle VPN', self.cmd_quit, None) + + if err: + self.statusitem.setImage_(self.img_err) + self.statusitem.setTitle_('Error!') + elif any_conn: + self.statusitem.setImage_(self.img_running) + self.statusitem.setTitle_('') + else: + self.statusitem.setImage_(self.img_idle) + self.statusitem.setTitle_('') + + def load_servers(self): + l = my.Defaults().arrayForKey_('servers') or [] + sl = [] + for s in l: + host = s.get('host', None) + if not host: continue + + nets = s.get('nets', []) + nl = [] + for n in nets: + subnet = n[0] + width = n[1] + net = models.SshuttleNet.alloc().init() + net.setSubnet_(subnet) + net.setWidth_(width) + nl.append(net) + + autoNets = s.get('autoNets', 1) + autoHosts = s.get('autoHosts', 1) + srv = models.SshuttleServer.alloc().init() + srv.setHost_(host) + srv.setAutoNets_(autoNets) + srv.setAutoHosts_(autoHosts) + srv.setNets_(nl) + sl.append(srv) + self.serversController.addObjects_(sl) + self.serversController.setSelectionIndex_(0) + + def save_servers(self): + l = [] + for s in self.servers: + host = s.host() + if not host: continue + nets = [] + for n in s.nets(): + subnet = n.subnet() + if not subnet: continue + nets.append((subnet, n.width())) + d = dict(host=s.host(), + nets=nets, + autoNets=s.autoNets(), + autoHosts=s.autoHosts()) + l.append(d) + my.Defaults().setObject_forKey_(l, 'servers') + self.fill_menu() + + def awakeFromNib(self): + self.routingField.removeAllItems() + tf = self.routingField.addItemWithTitle_ + tf('Send all traffic through this server') + tf('Determine automatically') + tf('Custom...') + + # Hmm, even when I mark this as !enabled in the .nib, it still comes + # through as enabled. So let's just disable it here (since we don't + # support this feature yet). + self.startAtLoginField.setEnabled_(False) + self.startAtLoginField.setState_(False) + + self.load_servers() + + # Initialize our menu item + self.menu = NSMenu.alloc().initWithTitle_('Sshuttle') + bar = NSStatusBar.systemStatusBar() + statusitem = bar.statusItemWithLength_(NSVariableStatusItemLength) + self.statusitem = statusitem + self.img_idle = my.Image('chicken-tiny-bw', 'png') + self.img_running = my.Image('chicken-tiny', 'png') + self.img_err = my.Image('chicken-tiny-err', 'png') + statusitem.setImage_(self.img_idle) + statusitem.setHighlightMode_(True) + statusitem.setMenu_(self.menu) + self.fill_menu() + + models.configchange_callback = my.DelayedCallback(self.save_servers) + + def sc(server): + if server.connected(): + self._connect(server) + else: + self._disconnect(server) + models.setconnect_callback = sc + + +# Note: NSApplicationMain calls sys.exit(), so this never returns. +NSApplicationMain(sys.argv) diff --git a/ui-macos/models.py b/ui-macos/models.py new file mode 100644 index 0000000..4e47719 --- /dev/null +++ b/ui-macos/models.py @@ -0,0 +1,108 @@ +from AppKit import * +import my + + +configchange_callback = setconnect_callback = None + + +def config_changed(): + if configchange_callback: + configchange_callback() + + +def _validate_ip(v): + parts = v.split('.')[:4] + if len(parts) < 4: + parts += ['0'] * (4 - len(parts)) + for i in range(4): + n = my.atoi(parts[i]) + if n < 0: + n = 0 + elif n > 255: + n = 255 + parts[i] = str(n) + return '.'.join(parts) + + +def _validate_width(v): + n = my.atoi(v) + if n < 0: + n = 0 + elif n > 32: + n = 32 + return n + + +class SshuttleNet(NSObject): + def subnet(self): + return getattr(self, '_k_subnet', None) + def setSubnet_(self, v): + self._k_subnet = v + config_changed() + @objc.accessor + def validateSubnet_error_(self, value, error): + print 'validateSubnet!' + return True, _validate_ip(value), error + + def width(self): + return getattr(self, '_k_width', 24) + def setWidth_(self, v): + self._k_width = v + config_changed() + @objc.accessor + def validateWidth_error_(self, value, error): + print 'validateWidth!' + return True, _validate_width(value), error + + +class SshuttleServer(NSObject): + def init(self): + self = super(SshuttleServer, self).init() + config_changed() + return self + + def connected(self): + return getattr(self, '_k_connected', False) + def setConnected_(self, v): + self._k_connected = v + config_changed() + if setconnect_callback: setconnect_callback(self) + + def host(self): + return getattr(self, '_k_host', None) + def setHost_(self, v): + self._k_host = v + config_changed() + @objc.accessor + def validateHost_error_(self, value, error): + print 'validatehost! %r %r %r' % (self, value, error) + while value.startswith('-'): + value = value[1:] + return True, value, error + + def nets(self): + return getattr(self, '_k_nets', []) + def setNets_(self, v): + self._k_nets = v + config_changed() + def netsHidden(self): + print 'checking netsHidden' + return self.autoNets() != 2 + def setNetsHidden_(self, v): + config_changed() + print 'setting netsHidden to %r' % v + pass + + def autoNets(self): + return getattr(self, '_k_autoNets', 1) + def setAutoNets_(self, v): + self._k_autoNets = v + self.setNetsHidden_(-1) + config_changed() + + def autoHosts(self): + return getattr(self, '_k_autoHosts', True) + def setAutoHosts_(self, v): + self._k_autoHosts = v + config_changed() + diff --git a/ui-macos/my.py b/ui-macos/my.py new file mode 100644 index 0000000..cd701eb --- /dev/null +++ b/ui-macos/my.py @@ -0,0 +1,62 @@ +import sys, os +from AppKit import * +import PyObjCTools.AppHelper + + +def bundle_path(name, typ): + if typ: + return NSBundle.mainBundle().pathForResource_ofType_(name, typ) + else: + return os.path.join(NSBundle.mainBundle().resourcePath(), name) + + +# Load an NSData using a python string +def Data(s): + return NSData.alloc().initWithBytes_length_(s, len(s)) + + +# Load a property list from a file in the application bundle. +def PList(name): + path = bundle_path(name, 'plist') + return NSDictionary.dictionaryWithContentsOfFile_(path) + + +# Load an NSImage from a file in the application bundle. +def Image(name, ext): + bytes = open(bundle_path(name, ext)).read() + img = NSImage.alloc().initWithData_(Data(bytes)) + return img + + +# Return the NSUserDefaults shared object. +def Defaults(): + return NSUserDefaults.standardUserDefaults() + + +# Usage: +# f = DelayedCallback(func, args...) +# later: +# f() +# +# When you call f(), it will schedule a call to func() next time the +# ObjC event loop iterates. Multiple calls to f() in a single iteration +# will only result in one call to func(). +# +def DelayedCallback(func, *args, **kwargs): + flag = [0] + def _go(): + if flag[0]: + print 'running %r (flag=%r)' % (func, flag) + flag[0] = 0 + func(*args, **kwargs) + def call(): + flag[0] += 1 + PyObjCTools.AppHelper.callAfter(_go) + return call + + +def atoi(s): + try: + return int(s) + except ValueError: + return 0 diff --git a/ui-macos/prime-sudo.sh b/ui-macos/prime-sudo.sh new file mode 100755 index 0000000..3b6806b --- /dev/null +++ b/ui-macos/prime-sudo.sh @@ -0,0 +1,4 @@ +#!/bin/sh +clear +printf "[local sudo] " +sudo true diff --git a/ui-macos/sources.list.do b/ui-macos/sources.list.do new file mode 100644 index 0000000..b2e85c7 --- /dev/null +++ b/ui-macos/sources.list.do @@ -0,0 +1,14 @@ +redo-always +exec >$3 +cat <<-EOF + app.icns + MainMenu.nib English.lproj/MainMenu.nib + UserDefaults.plist + chicken-tiny.png + chicken-tiny-bw.png + chicken-tiny-err.png +EOF +for d in *.py sshuttle/*.py sshuttle/sshuttle sshuttle/compat/*.py; do + echo $d +done +redo-stamp <$3 diff --git a/ui-macos/sshuttle b/ui-macos/sshuttle new file mode 120000 index 0000000..a96aa0e --- /dev/null +++ b/ui-macos/sshuttle @@ -0,0 +1 @@ +.. \ No newline at end of file diff --git a/ui-macos/stupid.py b/ui-macos/stupid.py new file mode 100644 index 0000000..fdb1e0b --- /dev/null +++ b/ui-macos/stupid.py @@ -0,0 +1,14 @@ +import os + +pid = os.fork() +if pid == 0: + # child + try: + os.setsid() + #os.execvp('sudo', ['sudo', 'SSH_ASKPASS=%s' % os.path.abspath('askpass.py'), 'ssh', 'afterlife', 'ls']) + os.execvp('ssh', ['ssh', 'afterlife', 'ls']) + finally: + os._exit(44) +else: + # parent + os.wait()