proxy_pac_rb 0.3.8 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Build Status](https://travis-ci.org/
|
4
|
-
[![Code Climate](https://codeclimate.com/github/
|
5
|
-
[![Coverage Status](https://coveralls.io/repos/
|
3
|
+
[![Build Status](https://travis-ci.org/fedux-org/proxy_pac_rb.png?branch=master)](https://travis-ci.org/fedux-org/proxy_pac_rb)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/fedux-org/proxy_pac_rb.png)](https://codeclimate.com/github/fedux-org/proxy_pac_rb)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/fedux-org/proxy_pac_rb/badge.png?branch=master)](https://coveralls.io/r/fedux-org/proxy_pac_rb?branch=master)
|
6
6
|
[![Gem Version](https://badge.fury.io/rb/proxy_pac_rb.png)](http://badge.fury.io/rb/proxy_pac_rb)
|
7
|
+
[![Downloads](http://img.shields.io/gem/dt/proxy_pac_rb.svg?style=flat)](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
|