proxy_pac_rb 0.3.8 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.travis.yml +2 -1
- data/Gemfile +13 -13
- data/Gemfile.lock +84 -58
- data/README.md +40 -13
- data/features/check_proxy_pac.feature +31 -0
- data/features/compress_proxy_pac.feature +3 -16
- data/features/resolve_proxy.feature +1 -1
- data/lib/proxy_pac_rb/cli/compress_proxy_pac.rb +25 -11
- data/lib/proxy_pac_rb/cli/find_proxy.rb +13 -8
- data/lib/proxy_pac_rb/cli/lint.rb +11 -0
- data/lib/proxy_pac_rb/cli/lint_proxy_pac.rb +37 -0
- data/lib/proxy_pac_rb/cli/runner.rb +5 -0
- data/lib/proxy_pac_rb/cli/shared.rb +4 -0
- data/lib/proxy_pac_rb/cli_validator.rb +14 -0
- data/lib/proxy_pac_rb/errors.rb +19 -0
- data/lib/proxy_pac_rb/javascript.rb +19 -0
- data/lib/proxy_pac_rb/main.rb +22 -0
- data/lib/proxy_pac_rb/parser.rb +32 -21
- data/lib/proxy_pac_rb/proxy_pac.rb +10 -20
- data/lib/proxy_pac_rb/proxy_pac_compressor.rb +9 -0
- data/lib/proxy_pac_rb/proxy_pac_dumper.rb +65 -0
- data/lib/proxy_pac_rb/proxy_pac_file.rb +20 -3
- data/lib/proxy_pac_rb/proxy_pac_linter.rb +82 -0
- data/lib/proxy_pac_rb/proxy_pac_loader.rb +98 -0
- data/lib/proxy_pac_rb/proxy_pac_parser.rb +41 -0
- data/lib/proxy_pac_rb/rack/proxy_pac_compressor.rb +68 -0
- data/lib/proxy_pac_rb/rack/proxy_pac_linter.rb +66 -0
- data/lib/proxy_pac_rb/runtimes/rubyracer.rb +2 -2
- data/lib/proxy_pac_rb/runtimes/rubyrhino.rb +2 -2
- data/lib/proxy_pac_rb/runtimes.rb +3 -3
- data/lib/proxy_pac_rb/version.rb +1 -1
- data/lib/proxy_pac_rb.rb +10 -3
- data/proxy_pac_rb.gemspec +2 -0
- data/spec/api_spec.rb +207 -0
- data/spec/parser_spec.rb +66 -53
- data/spec/rack/proxy_pac_compressor_spec.rb +59 -0
- data/spec/rack/proxy_pac_linter_spec.rb +65 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/matchers/file.rb +23 -0
- data/spec/support/rack_test.rb +1 -0
- data/spec/support/rspec.rb +3 -1
- data/spec/support/webmock.rb +1 -0
- metadata +30 -12
- data/features/support/fixtures.rb +0 -15
- data/lib/proxy_pac_rb/cli.rb +0 -75
- data/lib/proxy_pac_rb/file.rb +0 -21
- data/lib/proxy_pac_rb/javascript_compressor.rb +0 -9
- data/lib/proxy_pac_rb/proxy_pac_template +0 -39
- data/spec/file_spec.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d05d71f53826be61244e2e77515be5da29fe969c
|
4
|
+
data.tar.gz: 53df642fa1b82e2a39555c1f64c88eeb190e29e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ade07d2859ebeb2fa132c91a7151853e2c1d378536cb3343e8c16d81e84e474c31d89210cbefa4fff2a41993ebc9f36e45a2af3fdcc00caeea74ef74d81ca98b
|
7
|
+
data.tar.gz: 9e2368de26bb4e74125025bde77e5d3e8396a7b4aa3f8827a2ad1a29dc5f4c3d6fe48ca9666a65753f75eb3a36050d63610dd6d93cc92a9777865b649d808fc7
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -3,20 +3,18 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in local_pac.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
group :
|
7
|
-
|
8
|
-
|
9
|
-
gem 'pry-doc', require: false
|
6
|
+
group :debug do
|
7
|
+
gem 'pry'
|
8
|
+
gem 'byebug'
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
10
|
+
gem 'pry-doc', require: false
|
11
|
+
gem 'pry-stack_explorer', require: false
|
12
|
+
gem 'pry-exception_explorer', require: false
|
13
|
+
gem 'pry-rescue', require: false
|
14
|
+
gem 'pry-byebug', require: false
|
15
|
+
end
|
19
16
|
|
17
|
+
group :development, :test do
|
20
18
|
gem 'activesupport', '~> 4.0.0', require: false
|
21
19
|
gem 'aruba', require: false
|
22
20
|
gem 'awesome_print', require: 'ap'
|
@@ -36,7 +34,6 @@ group :development, :test do
|
|
36
34
|
gem 'rack'
|
37
35
|
gem 'rake', require: false
|
38
36
|
gem 'redcarpet', require: false
|
39
|
-
gem 'rspec', require: false
|
40
37
|
gem 'rubocop', require: false
|
41
38
|
gem 'simplecov', require: false
|
42
39
|
gem 'sinatra', require: 'sinatra/base'
|
@@ -44,6 +41,9 @@ group :development, :test do
|
|
44
41
|
gem 'travis-lint', require: false
|
45
42
|
gem 'versionomy', require: false
|
46
43
|
gem 'yard', require: false
|
44
|
+
gem 'rspec', require: false
|
45
|
+
gem 'webmock', require: false
|
46
|
+
gem 'rack-test', require: false
|
47
47
|
end
|
48
48
|
|
49
49
|
group :profile do
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
proxy_pac_rb (0.3.
|
4
|
+
proxy_pac_rb (0.3.8)
|
5
5
|
activesupport
|
6
6
|
addressable
|
7
7
|
uglifier
|
@@ -15,7 +15,7 @@ GEM
|
|
15
15
|
multi_json (~> 1.3)
|
16
16
|
thread_safe (~> 0.1)
|
17
17
|
tzinfo (~> 0.3.37)
|
18
|
-
addressable (2.3.
|
18
|
+
addressable (2.3.8)
|
19
19
|
aruba (0.6.2)
|
20
20
|
childprocess (>= 0.3.6)
|
21
21
|
cucumber (>= 1.1.1)
|
@@ -24,12 +24,12 @@ GEM
|
|
24
24
|
astrolabe (1.3.0)
|
25
25
|
parser (>= 2.2.0.pre.3, < 3.0)
|
26
26
|
awesome_print (1.6.1)
|
27
|
+
binding_of_caller (0.7.2)
|
28
|
+
debug_inspector (>= 0.0.1)
|
27
29
|
blockenspiel (0.4.5)
|
28
30
|
builder (3.2.2)
|
29
|
-
byebug (
|
30
|
-
columnize (
|
31
|
-
debugger-linecache (~> 1.2)
|
32
|
-
slop (~> 3.6)
|
31
|
+
byebug (4.0.4)
|
32
|
+
columnize (= 0.9.0)
|
33
33
|
childprocess (0.5.5)
|
34
34
|
ffi (~> 1.0, >= 1.0.11)
|
35
35
|
coderay (1.1.0)
|
@@ -38,39 +38,45 @@ GEM
|
|
38
38
|
activesupport
|
39
39
|
smart_colored
|
40
40
|
xml-simple
|
41
|
-
coveralls (0.7.
|
41
|
+
coveralls (0.7.12)
|
42
42
|
multi_json (~> 1.10)
|
43
|
-
rest-client (
|
43
|
+
rest-client (>= 1.6.8, < 2)
|
44
44
|
simplecov (~> 0.9.1)
|
45
45
|
term-ansicolor (~> 1.3)
|
46
46
|
thor (~> 0.19.1)
|
47
|
-
|
47
|
+
crack (0.4.2)
|
48
|
+
safe_yaml (~> 1.0.0)
|
49
|
+
cucumber (2.0.0)
|
48
50
|
builder (>= 2.1.2)
|
51
|
+
cucumber-core (~> 1.1.3)
|
49
52
|
diff-lcs (>= 1.1.3)
|
50
53
|
gherkin (~> 2.12)
|
51
54
|
multi_json (>= 1.7.5, < 2.0)
|
52
|
-
multi_test (>= 0.1.
|
53
|
-
|
55
|
+
multi_test (>= 0.1.2)
|
56
|
+
cucumber-core (1.1.3)
|
57
|
+
gherkin (~> 2.12.0)
|
58
|
+
debug_inspector (0.0.2)
|
54
59
|
diff-lcs (1.2.5)
|
55
60
|
docile (1.1.5)
|
56
|
-
|
61
|
+
domain_name (0.5.23)
|
62
|
+
unf (>= 0.0.5, < 1.0.0)
|
57
63
|
erubis (2.7.0)
|
58
|
-
execjs (2.
|
64
|
+
execjs (2.4.0)
|
59
65
|
fedux_org-stdlib (0.7.33)
|
60
66
|
activesupport
|
61
|
-
ffi (1.9.
|
67
|
+
ffi (1.9.8)
|
62
68
|
filegen (0.4.3)
|
63
69
|
activesupport
|
64
|
-
foreman (0.
|
65
|
-
dotenv (~> 1.0.2)
|
70
|
+
foreman (0.78.0)
|
66
71
|
thor (~> 0.19.1)
|
67
72
|
fuubar (2.0.0)
|
68
73
|
rspec (~> 3.0)
|
69
74
|
ruby-progressbar (~> 1.4)
|
70
75
|
gherkin (2.12.2)
|
71
76
|
multi_json (~> 1.3)
|
72
|
-
github-markup (1.3.
|
73
|
-
|
77
|
+
github-markup (1.3.3)
|
78
|
+
http-cookie (1.0.2)
|
79
|
+
domain_name (~> 0.5)
|
74
80
|
httparty (0.13.3)
|
75
81
|
json (~> 1.8)
|
76
82
|
multi_xml (>= 0.5.2)
|
@@ -80,82 +86,91 @@ GEM
|
|
80
86
|
sparkr (>= 0.2.0)
|
81
87
|
term-ansicolor
|
82
88
|
yard (~> 0.8.7.5)
|
89
|
+
interception (0.5)
|
83
90
|
json (1.8.2)
|
84
91
|
launchy (2.4.3)
|
85
92
|
addressable (~> 2.3)
|
86
93
|
libv8 (3.16.14.7)
|
87
|
-
license_finder (
|
94
|
+
license_finder (2.0.3)
|
88
95
|
bundler
|
89
96
|
httparty
|
90
|
-
sequel
|
91
|
-
sqlite3
|
92
97
|
thor
|
93
98
|
xml-simple
|
94
99
|
method_source (0.8.2)
|
95
100
|
mime-types (2.4.3)
|
96
101
|
minitest (4.7.5)
|
97
|
-
multi_json (1.
|
98
|
-
multi_test (0.1.
|
102
|
+
multi_json (1.11.0)
|
103
|
+
multi_test (0.1.2)
|
99
104
|
multi_xml (0.5.5)
|
100
|
-
netrc (0.10.
|
101
|
-
parser (2.2.0.
|
105
|
+
netrc (0.10.3)
|
106
|
+
parser (2.2.0.3)
|
102
107
|
ast (>= 1.1, < 3.0)
|
103
|
-
|
104
|
-
powerpack (0.0.9)
|
108
|
+
powerpack (0.1.0)
|
105
109
|
pry (0.10.1)
|
106
110
|
coderay (~> 1.1.0)
|
107
111
|
method_source (~> 0.8.1)
|
108
112
|
slop (~> 3.4)
|
109
|
-
pry-byebug (3.
|
110
|
-
byebug (~>
|
113
|
+
pry-byebug (3.1.0)
|
114
|
+
byebug (~> 4.0)
|
111
115
|
pry (~> 0.10)
|
112
116
|
pry-doc (0.6.0)
|
113
117
|
pry (~> 0.9)
|
114
118
|
yard (~> 0.8)
|
119
|
+
pry-exception_explorer (0.2.3)
|
120
|
+
pry-stack_explorer (>= 0.4.6)
|
121
|
+
pry-rescue (1.4.1)
|
122
|
+
interception (>= 0.5)
|
123
|
+
pry
|
124
|
+
pry-stack_explorer (0.4.9.2)
|
125
|
+
binding_of_caller (>= 0.7)
|
126
|
+
pry (>= 0.9.11)
|
115
127
|
rack (1.6.0)
|
116
128
|
rack-protection (1.5.3)
|
117
129
|
rack
|
130
|
+
rack-test (0.6.3)
|
131
|
+
rack (>= 1.0)
|
118
132
|
rainbow (2.0.0)
|
119
133
|
rake (10.4.2)
|
120
134
|
redcarpet (3.2.2)
|
121
135
|
ref (1.0.5)
|
122
|
-
rest-client (1.
|
136
|
+
rest-client (1.8.0)
|
137
|
+
http-cookie (>= 1.0.2, < 2.0)
|
123
138
|
mime-types (>= 1.16, < 3.0)
|
124
139
|
netrc (~> 0.7)
|
125
|
-
rspec (3.
|
126
|
-
rspec-core (~> 3.
|
127
|
-
rspec-expectations (~> 3.
|
128
|
-
rspec-mocks (~> 3.
|
129
|
-
rspec-core (3.
|
130
|
-
rspec-support (~> 3.
|
131
|
-
rspec-expectations (3.
|
140
|
+
rspec (3.2.0)
|
141
|
+
rspec-core (~> 3.2.0)
|
142
|
+
rspec-expectations (~> 3.2.0)
|
143
|
+
rspec-mocks (~> 3.2.0)
|
144
|
+
rspec-core (3.2.2)
|
145
|
+
rspec-support (~> 3.2.0)
|
146
|
+
rspec-expectations (3.2.0)
|
147
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
148
|
+
rspec-support (~> 3.2.0)
|
149
|
+
rspec-mocks (3.2.1)
|
132
150
|
diff-lcs (>= 1.2.0, < 2.0)
|
133
|
-
rspec-support (~> 3.
|
134
|
-
rspec-
|
135
|
-
|
136
|
-
rspec-support (3.1.2)
|
137
|
-
rubocop (0.28.0)
|
151
|
+
rspec-support (~> 3.2.0)
|
152
|
+
rspec-support (3.2.2)
|
153
|
+
rubocop (0.29.1)
|
138
154
|
astrolabe (~> 1.3)
|
139
|
-
parser (>= 2.2.0.
|
140
|
-
powerpack (~> 0.
|
155
|
+
parser (>= 2.2.0.1, < 3.0)
|
156
|
+
powerpack (~> 0.1)
|
141
157
|
rainbow (>= 1.99.1, < 3.0)
|
142
158
|
ruby-progressbar (~> 1.4)
|
143
|
-
ruby-prof (0.15.
|
144
|
-
ruby-progressbar (1.7.
|
145
|
-
|
146
|
-
simplecov (0.9.
|
159
|
+
ruby-prof (0.15.6)
|
160
|
+
ruby-progressbar (1.7.5)
|
161
|
+
safe_yaml (1.0.4)
|
162
|
+
simplecov (0.9.2)
|
147
163
|
docile (~> 1.1.0)
|
148
164
|
multi_json (~> 1.0)
|
149
|
-
simplecov-html (~> 0.
|
150
|
-
simplecov-html (0.
|
151
|
-
sinatra (1.4.
|
165
|
+
simplecov-html (~> 0.9.0)
|
166
|
+
simplecov-html (0.9.0)
|
167
|
+
sinatra (1.4.6)
|
152
168
|
rack (~> 1.4)
|
153
169
|
rack-protection (~> 1.4)
|
154
|
-
tilt (
|
170
|
+
tilt (>= 1.3, < 3)
|
155
171
|
slop (3.6.0)
|
156
172
|
smart_colored (1.1.1)
|
157
173
|
sparkr (0.4.1)
|
158
|
-
sqlite3 (1.3.10)
|
159
174
|
term-ansicolor (1.3.0)
|
160
175
|
tins (~> 1.0)
|
161
176
|
therubyracer (0.12.1)
|
@@ -165,20 +180,26 @@ GEM
|
|
165
180
|
therubyrhino_jar (>= 1.7.3)
|
166
181
|
therubyrhino_jar (1.7.4)
|
167
182
|
thor (0.19.1)
|
168
|
-
thread_safe (0.3.
|
169
|
-
tilt (
|
170
|
-
tins (1.3.
|
183
|
+
thread_safe (0.3.5)
|
184
|
+
tilt (2.0.1)
|
185
|
+
tins (1.3.5)
|
171
186
|
tmrb (1.2.7)
|
172
187
|
thor
|
173
188
|
travis-lint (2.0.0)
|
174
189
|
json
|
175
190
|
tzinfo (0.3.43)
|
176
|
-
uglifier (2.7.
|
191
|
+
uglifier (2.7.1)
|
177
192
|
execjs (>= 0.3.0)
|
178
193
|
json (>= 1.8.0)
|
194
|
+
unf (0.1.4)
|
195
|
+
unf_ext
|
196
|
+
unf_ext (0.0.6)
|
179
197
|
versionomy (0.4.4)
|
180
198
|
blockenspiel (>= 0.4.5)
|
181
|
-
|
199
|
+
webmock (1.20.4)
|
200
|
+
addressable (>= 2.3.6)
|
201
|
+
crack (>= 0.3.2)
|
202
|
+
xml-simple (1.1.5)
|
182
203
|
yard (0.8.7.6)
|
183
204
|
|
184
205
|
PLATFORMS
|
@@ -206,7 +227,11 @@ DEPENDENCIES
|
|
206
227
|
pry
|
207
228
|
pry-byebug
|
208
229
|
pry-doc
|
230
|
+
pry-exception_explorer
|
231
|
+
pry-rescue
|
232
|
+
pry-stack_explorer
|
209
233
|
rack
|
234
|
+
rack-test
|
210
235
|
rake
|
211
236
|
redcarpet
|
212
237
|
rspec
|
@@ -219,4 +244,5 @@ DEPENDENCIES
|
|
219
244
|
tmrb
|
220
245
|
travis-lint
|
221
246
|
versionomy
|
247
|
+
webmock
|
222
248
|
yard
|
data/README.md
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# Proxy Pac Rb
|
2
2
|
|
3
|
-
[](https://travis-ci.org/fedux-org/proxy_pac_rb)
|
4
|
+
[](https://codeclimate.com/github/fedux-org/proxy_pac_rb)
|
5
|
+
[](https://coveralls.io/r/fedux-org/proxy_pac_rb?branch=master)
|
6
6
|
[](http://badge.fury.io/rb/proxy_pac_rb)
|
7
|
+
[](http://rubygems.org/gems/proxy_pac_rb)
|
8
|
+
|
7
9
|
|
8
10
|
`proxy_pac_rb` is a gem to parse [proxy auto-config](http://en.wikipedia.org/wiki/Proxy_auto-config) files.
|
9
11
|
`proxy_pac_rb` uses a JavaScript runtime to evaulate a proxy auto-config file the same way a browser does to determine what proxy (if
|
@@ -52,9 +54,9 @@ After installing the `proxy_pac_rb` gem you must install a JavaScript runtime. C
|
|
52
54
|
|
53
55
|
*Use*
|
54
56
|
|
55
|
-
```
|
57
|
+
```bash
|
56
58
|
# Download pac
|
57
|
-
curl -L -o sample.pac https://github.com/
|
59
|
+
curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
|
58
60
|
|
59
61
|
# Parse pac
|
60
62
|
pprb find proxy -c 127.0.0.1 -t "2014-03-09 12:00:00" -p sample.pac -u https://github.com
|
@@ -70,13 +72,38 @@ transferred to download the proxy.pac.
|
|
70
72
|
|
71
73
|
```
|
72
74
|
# Download pac
|
73
|
-
curl -L -o sample.pac https://github.com/
|
75
|
+
curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
|
74
76
|
|
75
|
-
#
|
77
|
+
# Compress pac
|
76
78
|
pprb compress proxy_pac -p sample.pac
|
79
|
+
```
|
77
80
|
|
78
|
-
|
79
|
-
|
81
|
+
#### Lint proxy.pac-file
|
82
|
+
|
83
|
+
You can lint a proxy.pac with `pprb` to check a proxy.pac before deploying it.
|
84
|
+
|
85
|
+
```
|
86
|
+
# Download pac
|
87
|
+
curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
|
88
|
+
|
89
|
+
# Lint pac
|
90
|
+
pprb lint proxy_pac -p sample.pac
|
91
|
+
```
|
92
|
+
|
93
|
+
### Rack-based servers
|
94
|
+
|
95
|
+
*Compressor Middleware*
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
require 'proxy_pac_rb/rack/proxy_pac_compressor'
|
99
|
+
use ProxyPacRb::Rack::ProxyPacCompressor
|
100
|
+
```
|
101
|
+
|
102
|
+
*Linter Middleware*
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
require 'proxy_pac_rb/rack/proxy_pac_linter'
|
106
|
+
use ProxyPacRb::Rack::ProxyPacLinter
|
80
107
|
```
|
81
108
|
|
82
109
|
### Ruby
|
@@ -86,14 +113,14 @@ pprb compress proxy_pac -p sample.pac
|
|
86
113
|
```ruby
|
87
114
|
require 'proxy_pac_rb'
|
88
115
|
|
89
|
-
file = ProxyPacRb::Parser.new.load('https://github.com/
|
116
|
+
file = ProxyPacRb::Parser.new.load('https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac')
|
90
117
|
file.find('https://github.com') # => "DIRECT"
|
91
118
|
```
|
92
119
|
|
93
120
|
*Load from filesystem*
|
94
121
|
|
95
122
|
```bash
|
96
|
-
curl -L -o sample.pac https://github.com/
|
123
|
+
curl -L -o sample.pac https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample.pac
|
97
124
|
```
|
98
125
|
|
99
126
|
```ruby
|
@@ -123,11 +150,11 @@ file.find('http://localhost') # => "DIRECT"
|
|
123
150
|
require 'proxy_pac_rb'
|
124
151
|
|
125
152
|
environment = ProxyPacRb::Environment.new(client_ip: '127.0.0.1')
|
126
|
-
file = ProxyPacRb::Parser.new(environment).load('https://github.com/
|
153
|
+
file = ProxyPacRb::Parser.new(environment).load('https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample2.pac')
|
127
154
|
file.find('https://github.com') # => "PROXY localhost:8080"
|
128
155
|
|
129
156
|
environment = ProxyPacRb::Environment.new(client_ip: '127.0.0.2')
|
130
|
-
file = ProxyPacRb::Parser.new(environment).load('https://github.com/
|
157
|
+
file = ProxyPacRb::Parser.new(environment).load('https://github.com/fedux-org/proxy_pac_rb/raw/master/files/sample2.pac')
|
131
158
|
file.find('https://github.com') # => "DIRECT"
|
132
159
|
```
|
133
160
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: Lint proxy pac
|
2
|
+
|
3
|
+
As a proxy administrator
|
4
|
+
I want to compress a proxy pac
|
5
|
+
In order to save some bandwidth
|
6
|
+
|
7
|
+
Scenario: Valid proxy.pac
|
8
|
+
Given a file named "proxy.pac" with:
|
9
|
+
"""
|
10
|
+
function FindProxyForURL(url, host) {
|
11
|
+
return 'PROXY localhost:3128';
|
12
|
+
}
|
13
|
+
"""
|
14
|
+
When I successfully run `pprb lint pac_file -p proxy.pac`
|
15
|
+
Then the output should contain:
|
16
|
+
"""
|
17
|
+
proxy.pac "proxy.pac" is of type file and is valid
|
18
|
+
"""
|
19
|
+
|
20
|
+
Scenario: Invalid proxy.pac
|
21
|
+
Given a file named "proxy.pac" with:
|
22
|
+
"""
|
23
|
+
function FindProxyForURL(url, host) {
|
24
|
+
return $"§$ 'PROXY localhost:3128';
|
25
|
+
}
|
26
|
+
"""
|
27
|
+
When I run `pprb lint pac_file -p proxy.pac`
|
28
|
+
Then the output should contain:
|
29
|
+
"""
|
30
|
+
proxy.pac "proxy.pac" is of type file and is invalid
|
31
|
+
"""
|
@@ -11,7 +11,7 @@ Feature: Compress proxy pac
|
|
11
11
|
return 'PROXY localhost:3128';
|
12
12
|
}
|
13
13
|
"""
|
14
|
-
When I successfully run `pprb compress pac_file -p proxy.pac`
|
14
|
+
When I successfully run `pprb compress pac_file -p proxy.pac.in`
|
15
15
|
Then the file "proxy.pac" should contain:
|
16
16
|
"""
|
17
17
|
function FindProxyForURL(){return"PROXY localhost:3128"}
|
@@ -30,19 +30,6 @@ Feature: Compress proxy pac
|
|
30
30
|
function FindProxyForURL(){return"PROXY localhost:3128"}
|
31
31
|
"""
|
32
32
|
|
33
|
-
Scenario: Use proxy.pac.in as filename
|
34
|
-
Given a file named "proxy.pac.in" with:
|
35
|
-
"""
|
36
|
-
function FindProxyForURL(url, host) {
|
37
|
-
return 'PROXY localhost:3128';
|
38
|
-
}
|
39
|
-
"""
|
40
|
-
When I successfully run `pprb compress pac_file -p proxy.pac.in`
|
41
|
-
Then the file "proxy.pac" should contain:
|
42
|
-
"""
|
43
|
-
function FindProxyForURL(){return"PROXY localhost:3128"}
|
44
|
-
"""
|
45
|
-
|
46
33
|
Scenario: Checks for valid proxy pac
|
47
34
|
Given a file named "proxy.pac.in" with:
|
48
35
|
"""
|
@@ -54,7 +41,7 @@ Feature: Compress proxy pac
|
|
54
41
|
When I run `pprb compress pac_file -p proxy.pac.in`
|
55
42
|
Then the output should contain:
|
56
43
|
"""
|
57
|
-
|
44
|
+
Unexpected string
|
58
45
|
"""
|
59
46
|
|
60
47
|
Scenario: Use multiple proxy.pac.in
|
@@ -76,7 +63,7 @@ Feature: Compress proxy pac
|
|
76
63
|
return 'PROXY localhost:3128';
|
77
64
|
}
|
78
65
|
"""
|
79
|
-
When I successfully run `pprb compress pac_file -p proxy1.pac proxy2.pac proxy3.pac`
|
66
|
+
When I successfully run `pprb compress pac_file -p proxy1.pac.in proxy2.pac.in proxy3.pac`
|
80
67
|
Then the file "proxy1.pac" should contain:
|
81
68
|
"""
|
82
69
|
function FindProxyForURL(){return"PROXY localhost:3128"}
|
@@ -58,7 +58,7 @@ Feature: Resolve proxy
|
|
58
58
|
When I run `pprb find proxy -p proxy.pac -u www.example.org`
|
59
59
|
Then the output should contain:
|
60
60
|
"""
|
61
|
-
|
61
|
+
You need to provide a path to an existing proxy pac file. The file "proxy.pac" does not exist.
|
62
62
|
"""
|
63
63
|
|
64
64
|
Scenario: Missing url
|
@@ -1,32 +1,46 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module ProxyPacRb
|
3
3
|
module Cli
|
4
|
-
#
|
4
|
+
# Compress proxy pac
|
5
5
|
class CompressProxyPac < Thor::Group
|
6
6
|
include Shared
|
7
7
|
|
8
8
|
class_option :proxy_pac, type: :array, desc: 'Proxy.pac-file(s)', aliases: '-p', required: true
|
9
9
|
|
10
|
+
def pre_init
|
11
|
+
enable_debug_mode
|
12
|
+
end
|
13
|
+
|
10
14
|
def set_variables
|
11
|
-
@proxy_pacs = options[:proxy_pac].map { |p|
|
12
|
-
@compressor =
|
15
|
+
@proxy_pacs = options[:proxy_pac].map { |p| ProxyPacFile.new source: p }
|
16
|
+
@compressor = ProxyPacCompressor.new
|
17
|
+
@dumper = ProxyPacDumper.new
|
18
|
+
@loader = ProxyPacLoader.new
|
19
|
+
@linter = ProxyPacLinter.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def load_files
|
23
|
+
@proxy_pacs.each { |p| @loader.load(p) }
|
13
24
|
end
|
14
25
|
|
15
26
|
def test_proxy_pac
|
16
|
-
@proxy_pacs.
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
@proxy_pacs.keep_if do |p|
|
28
|
+
@linter.lint(p)
|
29
|
+
|
30
|
+
if p.valid?
|
31
|
+
true
|
32
|
+
else
|
33
|
+
$stderr.puts %(proxy.pac "#{p.source}" is of type #{p.type} and is invalid. I'm going to ignore that file.)
|
34
|
+
|
35
|
+
false
|
22
36
|
end
|
23
37
|
end
|
24
38
|
end
|
25
39
|
|
26
40
|
def compress_proxy_pac
|
27
41
|
@proxy_pacs.each do |p|
|
28
|
-
|
29
|
-
p
|
42
|
+
@compressor.compress(p)
|
43
|
+
@dumper.dump(p, type: :template)
|
30
44
|
end
|
31
45
|
end
|
32
46
|
end
|
@@ -10,22 +10,27 @@ module ProxyPacRb
|
|
10
10
|
class_option :proxy_pac, desc: 'Proxy.pac-file', aliases: '-p', required: true
|
11
11
|
class_option :urls, type: :array, desc: 'URLs to check against proxy pac', aliases: '-u', required: true
|
12
12
|
|
13
|
+
def pre_init
|
14
|
+
enable_debug_mode
|
15
|
+
end
|
16
|
+
|
13
17
|
def find_proxy
|
14
18
|
CliValidator.new(options).validate
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
environment = ProxyPacRb::Environment.new(
|
21
|
+
client_ip: IPAddr.new(options[:client_ip]),
|
22
|
+
time: Time.parse(options[:time])
|
23
|
+
)
|
24
|
+
|
25
|
+
file = ProxyPacRb::Parser.new(environment: environment).parse(options[:proxy_pac])
|
20
26
|
|
21
|
-
|
22
|
-
file = ProxyPacRb::Parser.new(environment).source(proxy_pac.content)
|
27
|
+
return if file.blank?
|
23
28
|
|
24
29
|
$stderr.printf("%30s: %-s\n", 'url', 'result')
|
25
|
-
urls.each do |u|
|
30
|
+
options[:urls].each do |u|
|
26
31
|
begin
|
27
32
|
$stderr.printf("%30s: %-s\n", u, file.find(u))
|
28
|
-
rescue
|
33
|
+
rescue UrlInvalidError
|
29
34
|
$stderr.puts "You provide an invalid url \"#{u}\". Please use a correct one."
|
30
35
|
end
|
31
36
|
end
|