sheepsafe 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +15 -0
- data/lib/sheepsafe/controller.rb +22 -7
- data/lib/sheepsafe/installer.rb +18 -0
- data/lib/sheepsafe.rb +1 -1
- data/sheepsafe.gemspec +1 -1
- data/spec/sheepsafe_spec.rb +3 -3
- metadata +3 -3
data/README.md
CHANGED
@@ -49,6 +49,21 @@ but this setup Works For Me.
|
|
49
49
|
- After installing the gem, run `sheepsafe install` and follow the
|
50
50
|
prompts for configuring Sheepsafe.
|
51
51
|
|
52
|
+
## Usage
|
53
|
+
|
54
|
+
- `sheepsafe`: when run with no arguments, this checks your current
|
55
|
+
network and updates settings if necessary.
|
56
|
+
- `sheepsafe install`: Run the command-line installer. Fill out the
|
57
|
+
prompts and you're ready.
|
58
|
+
- `sheepsafe update`: Run when you've upgraded the gem to make sure
|
59
|
+
launchd is running the most recent version.
|
60
|
+
- `sheepsafe add`: Add the current network to your list of trusted
|
61
|
+
networks.
|
62
|
+
- `sheepsafe list`: Show the list of trusted networks.
|
63
|
+
- `sheepsafe proxy up`: Manually start the SSH SOCKS proxy.
|
64
|
+
- `sheepsafe proxy down`: Manually stop the SSH SOCKS proxy.
|
65
|
+
- `sheepsafe proxy kick`: Manually restart the SSH SOCKS proxy.
|
66
|
+
|
52
67
|
## Growl
|
53
68
|
|
54
69
|
If you wish to receive Growl notifications when Sheepsafe is switching
|
data/lib/sheepsafe/controller.rb
CHANGED
@@ -19,7 +19,7 @@ module Sheepsafe
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def run
|
22
|
-
if ARGV.first == 'proxy' # 'sheepsafe proxy up/down'
|
22
|
+
if ARGV.first == 'proxy' # 'sheepsafe proxy up/down/kick'
|
23
23
|
bring_socks_proxy ARGV[1]
|
24
24
|
return
|
25
25
|
end
|
@@ -32,16 +32,24 @@ module Sheepsafe
|
|
32
32
|
system "scselect #{@config.trusted_location}"
|
33
33
|
bring_socks_proxy 'down'
|
34
34
|
elsif switch_to_untrusted?
|
35
|
+
notified = false
|
36
|
+
loop do
|
37
|
+
require 'open-uri'
|
38
|
+
length = open("http://example.com") {|f| f.meta['content-length'] } rescue nil
|
39
|
+
break if length == "596" # successful contact w/ example.com
|
40
|
+
notify_warning("Waiting for internet connection before switching") unless notified
|
41
|
+
notified = true
|
42
|
+
sleep 5
|
43
|
+
end
|
35
44
|
notify_warning "Switching to #{@config.untrusted_location} location"
|
36
|
-
bring_socks_proxy 'up'
|
37
45
|
system "scselect #{@config.untrusted_location}"
|
46
|
+
bring_socks_proxy 'up'
|
38
47
|
end
|
39
48
|
@config.last_network = @network
|
40
49
|
@config.write
|
41
50
|
elsif !@network.trusted?
|
42
51
|
# recycle the proxy server on network changes
|
43
|
-
bring_socks_proxy '
|
44
|
-
bring_socks_proxy 'up'
|
52
|
+
bring_socks_proxy 'restart'
|
45
53
|
end
|
46
54
|
else
|
47
55
|
log("AirPort is off")
|
@@ -66,7 +74,14 @@ module Sheepsafe
|
|
66
74
|
end
|
67
75
|
|
68
76
|
def bring_socks_proxy(direction)
|
69
|
-
|
77
|
+
cmd = case direction
|
78
|
+
when 'up' then 'start'
|
79
|
+
when 'down' then 'stop'
|
80
|
+
when 'kick' then 'restart'
|
81
|
+
else
|
82
|
+
direction
|
83
|
+
end
|
84
|
+
Daemons.run_proc('.sheepsafe.proxy', :ARGV => [cmd], :dir_mode => :normal, :dir => ENV['HOME']) do
|
70
85
|
pid = nil
|
71
86
|
trap("TERM") do
|
72
87
|
Process.kill("TERM", pid)
|
@@ -76,14 +91,14 @@ module Sheepsafe
|
|
76
91
|
pid = fork do
|
77
92
|
exec("ssh -ND #{@config.socks_port} #{@config.ssh_host}")
|
78
93
|
end
|
79
|
-
Process.waitpid(pid
|
94
|
+
Process.waitpid(pid)
|
80
95
|
sleep 1
|
81
96
|
end
|
82
97
|
end
|
83
98
|
end
|
84
99
|
|
85
100
|
def proxy_running?
|
86
|
-
File.exist?("#{ENV['HOME']}/.sheepsafe.proxy.pid")
|
101
|
+
File.exist?("#{ENV['HOME']}/.sheepsafe.proxy.pid") && File.read("#{ENV['HOME']}/.sheepsafe.proxy.pid").to_i > 0
|
87
102
|
end
|
88
103
|
|
89
104
|
def notify_ok(msg)
|
data/lib/sheepsafe/installer.rb
CHANGED
@@ -79,6 +79,7 @@ MSG
|
|
79
79
|
# For details see http://tech.inhelsinki.nl/locationchanger/
|
80
80
|
def write_launchd_plist
|
81
81
|
say "Setting up launchd configuration file #{PLIST_FILE}..."
|
82
|
+
Dir.mkdir(File.dirname(PLIST_FILE)) unless File.directory?(File.dirname(PLIST_FILE))
|
82
83
|
plist = <<-PLIST
|
83
84
|
<?xml version="1.0" encoding="UTF-8"?>
|
84
85
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
|
@@ -138,6 +139,23 @@ PLIST
|
|
138
139
|
register_launchd_task
|
139
140
|
end
|
140
141
|
|
142
|
+
def add
|
143
|
+
@config.trusted_names << @network.ssid
|
144
|
+
@config.last_network = nil
|
145
|
+
say "Adding #{config.trusted_names[num]} to your trusted locations"
|
146
|
+
write_config
|
147
|
+
@controller.run
|
148
|
+
end
|
149
|
+
|
150
|
+
def list
|
151
|
+
say "Currently trusted locations:"
|
152
|
+
puts @config.trusted_names
|
153
|
+
end
|
154
|
+
|
155
|
+
#
|
156
|
+
# Needed? Remove current network from trusted
|
157
|
+
#
|
158
|
+
|
141
159
|
private
|
142
160
|
def update_config_with_network
|
143
161
|
unless config.trusted_location
|
data/lib/sheepsafe.rb
CHANGED
data/sheepsafe.gemspec
CHANGED
data/spec/sheepsafe_spec.rb
CHANGED
@@ -58,8 +58,7 @@ describe Sheepsafe::Controller do
|
|
58
58
|
|
59
59
|
it "recycles the proxy server process when on the untrusted network" do
|
60
60
|
network.stub :trusted? => false
|
61
|
-
controller.should_receive(:bring_socks_proxy).with('
|
62
|
-
controller.should_receive(:bring_socks_proxy).with('up').ordered
|
61
|
+
controller.should_receive(:bring_socks_proxy).with('restart')
|
63
62
|
controller.run
|
64
63
|
end
|
65
64
|
end
|
@@ -94,8 +93,9 @@ describe Sheepsafe::Controller do
|
|
94
93
|
end
|
95
94
|
|
96
95
|
context "to untrusted" do
|
97
|
-
it "changes to the untrusted location" do
|
96
|
+
it "changes to the untrusted location after connecting to example.com" do
|
98
97
|
controller.should_receive(:switch_to_untrusted?).and_return true
|
98
|
+
controller.should_receive(:open).and_return("596")
|
99
99
|
controller.should_receive(:system).with("scselect untrusted_location")
|
100
100
|
controller.should_receive(:bring_socks_proxy).with('up')
|
101
101
|
controller.run
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sheepsafe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 4
|
10
|
+
version: 0.2.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nick Sieger
|