local_pac 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/local_pac/file_server.rb +2 -0
- data/lib/local_pac/java_script_compressor.rb +18 -0
- data/lib/local_pac/null_pac_file.rb +8 -0
- data/lib/local_pac/pac_file.rb +5 -0
- data/lib/local_pac/pac_file_validator.rb +12 -0
- data/lib/local_pac/pac_manager.rb +20 -6
- data/lib/local_pac/version.rb +1 -1
- data/lib/local_pac.rb +4 -0
- data/local_pac.gemspec +3 -0
- data/spec/features/fetch_proxy_pac_spec.rb +23 -2
- data/spec/java_script_compressor_spec.rb +39 -0
- data/spec/null_pac_file_spec.rb +10 -0
- data/spec/pac_file_spec.rb +11 -0
- data/spec/pac_file_validator_spec.rb +31 -0
- data/spec/pac_manager_spec.rb +19 -3
- data/spec/support/string.rb +2 -0
- metadata +57 -1
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
class JavaScriptCompressor
|
4
|
+
private
|
5
|
+
|
6
|
+
attr_reader :compressor
|
7
|
+
|
8
|
+
public
|
9
|
+
|
10
|
+
def initialize(compressor = Uglifier.new)
|
11
|
+
@compressor = compressor
|
12
|
+
end
|
13
|
+
|
14
|
+
def prepare(file)
|
15
|
+
file.compressed_content = compressor.compile(file.content)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/local_pac/pac_file.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
module LocalPac
|
3
3
|
class PacFile
|
4
4
|
attr_reader :path
|
5
|
+
attr_accessor :compressed_content
|
5
6
|
|
6
7
|
def initialize(path)
|
7
8
|
@path = path
|
@@ -18,5 +19,9 @@ module LocalPac
|
|
18
19
|
def nil?
|
19
20
|
false
|
20
21
|
end
|
22
|
+
|
23
|
+
def prepare(handler)
|
24
|
+
handler.prepare(self)
|
25
|
+
end
|
21
26
|
end
|
22
27
|
end
|
@@ -3,22 +3,27 @@ module LocalPac
|
|
3
3
|
|
4
4
|
private
|
5
5
|
|
6
|
-
attr_reader :cache, :null_file, :paths, :creator
|
6
|
+
attr_reader :cache, :null_file, :paths, :creator, :content_handler, :validator
|
7
7
|
|
8
8
|
public
|
9
9
|
|
10
10
|
def initialize(paths = default_paths, creator = PacFile)
|
11
|
-
@paths
|
12
|
-
@creator
|
13
|
-
@cache
|
14
|
-
@null_file
|
11
|
+
@paths = Array(paths)
|
12
|
+
@creator = creator
|
13
|
+
@cache = ActiveSupport::Cache::MemoryStore.new
|
14
|
+
@null_file = proc { NullPacFile.new }
|
15
|
+
@content_handler = JavaScriptCompressor.new
|
16
|
+
@validator = PacFileValidator.new
|
15
17
|
end
|
16
18
|
|
17
19
|
def find(name)
|
18
20
|
name = File.basename(name, '.pac').to_sym
|
19
21
|
|
20
22
|
cache.fetch(name) do
|
21
|
-
|
23
|
+
file = valid_pac_files.find(null_file) { |f| f.name == name }
|
24
|
+
file.prepare(content_handler)
|
25
|
+
|
26
|
+
file
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
@@ -30,6 +35,15 @@ module LocalPac
|
|
30
35
|
end
|
31
36
|
end
|
32
37
|
|
38
|
+
def valid_pac_files
|
39
|
+
files = []
|
40
|
+
pac_files.each do |f|
|
41
|
+
files << f if validator.valid?(f)
|
42
|
+
end
|
43
|
+
|
44
|
+
files
|
45
|
+
end
|
46
|
+
|
33
47
|
def default_paths
|
34
48
|
[
|
35
49
|
File.expand_path(File.join(ENV['HOME'], '.config', 'pacfiles')),
|
data/lib/local_pac/version.rb
CHANGED
data/lib/local_pac.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'sinatra'
|
2
2
|
require 'fileutils'
|
3
3
|
require 'logger'
|
4
|
+
require 'uglifier'
|
5
|
+
require 'pac'
|
4
6
|
|
5
7
|
require 'active_support/cache'
|
6
8
|
|
@@ -10,5 +12,7 @@ require 'local_pac/file_server'
|
|
10
12
|
require 'local_pac/pac_manager'
|
11
13
|
require 'local_pac/pac_file'
|
12
14
|
require 'local_pac/null_pac_file'
|
15
|
+
require 'local_pac/java_script_compressor'
|
16
|
+
require 'local_pac/pac_file_validator'
|
13
17
|
|
14
18
|
module LocalPac; end
|
data/local_pac.gemspec
CHANGED
@@ -2,8 +2,15 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Fetch proxy pac' do
|
4
4
|
context '/v1/pac' do
|
5
|
+
let(:valid_pac_file) do <<-EOS.strip_heredoc
|
6
|
+
function FindProxyForURL(url, host) {
|
7
|
+
return "DIRECT"
|
8
|
+
}
|
9
|
+
EOS
|
10
|
+
end
|
11
|
+
|
5
12
|
it 'finds an existing proxy pac' do
|
6
|
-
create_file '.config/pacfiles/file1.pac',
|
13
|
+
create_file '.config/pacfiles/file1.pac', valid_pac_file
|
7
14
|
|
8
15
|
env = {
|
9
16
|
'HOME' => working_directory,
|
@@ -11,7 +18,7 @@ describe 'Fetch proxy pac' do
|
|
11
18
|
|
12
19
|
with_environment env, clear: true do
|
13
20
|
response = get('/v1/pac/file1.pac')
|
14
|
-
expect(response.body).to eq(
|
21
|
+
expect(response.body).to eq(valid_pac_file)
|
15
22
|
end
|
16
23
|
end
|
17
24
|
|
@@ -19,5 +26,19 @@ describe 'Fetch proxy pac' do
|
|
19
26
|
response = get('/v1/pac/does_not_exist.pac')
|
20
27
|
expect(response.body).to include('does_not_exist.pac')
|
21
28
|
end
|
29
|
+
|
30
|
+
it 'compresses data for transit if requested' do
|
31
|
+
['deflate','gzip', 'deflate,gzip','gzip,deflate'].each do|compression_method|
|
32
|
+
response = get('/v1/pac/does_not_exist.pac', {}, { 'HTTP_ACCEPT_ENCODING' => compression_method })
|
33
|
+
expect(response.headers['Content-Encoding']).to be
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'does not compresses data for transit if not requested' do
|
38
|
+
['deflate','gzip', 'deflate,gzip','gzip,deflate'].each do|compression_method|
|
39
|
+
response = get('/v1/pac/does_not_exist.pac')
|
40
|
+
expect(response.headers['Content-Encoding']).not_to be
|
41
|
+
end
|
42
|
+
end
|
22
43
|
end
|
23
44
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe JavaScriptCompressor do
|
5
|
+
context '#prepare' do
|
6
|
+
it 'compresses the javascript content' do
|
7
|
+
javascript = <<-EOS.strip_heredoc
|
8
|
+
function FindProxyForURL(url, host) {
|
9
|
+
|
10
|
+
dnsDomainIs(host, 'example.org');
|
11
|
+
shExpMatch(url, "*.local")
|
12
|
+
isInNet("127.0.0.1", "172.16.0.0", "255.240.0.0")
|
13
|
+
myIpAddress()
|
14
|
+
dnsResolve(host)
|
15
|
+
isPlainHostName(host)
|
16
|
+
localHostOrDomainIs(host, "www.google.com")
|
17
|
+
isResolvable(host)
|
18
|
+
dnsDomainLevels(host)
|
19
|
+
weekdayRange("MON", "FRI")
|
20
|
+
dateRange("JAN", "MAR")
|
21
|
+
timeRange(8, 18)
|
22
|
+
alert('asdf')
|
23
|
+
|
24
|
+
}
|
25
|
+
EOS
|
26
|
+
|
27
|
+
compressed_javascript = <<-EOS.strip_heredoc.chomp
|
28
|
+
function FindProxyForURL(e,a){dnsDomainIs(a,"example.org"),shExpMatch(e,"*.local"),isInNet("127.0.0.1","172.16.0.0","255.240.0.0"),myIpAddress(),dnsResolve(a),isPlainHostName(a),localHostOrDomainIs(a,"www.google.com"),isResolvable(a),dnsDomainLevels(a),weekdayRange("MON","FRI"),dateRange("JAN","MAR"),timeRange(8,18),alert("asdf")}
|
29
|
+
EOS
|
30
|
+
|
31
|
+
file = double('file')
|
32
|
+
allow(file).to receive(:content).and_return(javascript)
|
33
|
+
expect(file).to receive(:compressed_content=).with(compressed_javascript)
|
34
|
+
|
35
|
+
compressor = JavaScriptCompressor.new
|
36
|
+
compressor.prepare(file)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/null_pac_file_spec.rb
CHANGED
@@ -29,4 +29,14 @@ describe NullPacFile do
|
|
29
29
|
expect(file.nil?).to be_true
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
context '#compressed_content' do
|
34
|
+
it 'uses an external handler to compress content' do
|
35
|
+
handler = double('handler')
|
36
|
+
|
37
|
+
file = create_file('file1.pac', 'content')
|
38
|
+
file = NullPacFile.new
|
39
|
+
file.prepare(handler)
|
40
|
+
end
|
41
|
+
end
|
32
42
|
end
|
data/spec/pac_file_spec.rb
CHANGED
@@ -30,4 +30,15 @@ describe PacFile do
|
|
30
30
|
expect(file.nil?).to be_false
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
context '#compressed_content' do
|
35
|
+
it 'uses an external handler to compress content' do
|
36
|
+
handler = double('handler')
|
37
|
+
expect(handler).to receive(:prepare)
|
38
|
+
|
39
|
+
file = create_file('file1.pac', 'content')
|
40
|
+
file = PacFile.new(file)
|
41
|
+
file.prepare(handler)
|
42
|
+
end
|
43
|
+
end
|
33
44
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PacFileValidator do
|
4
|
+
context '#valid?' do
|
5
|
+
let(:valid_pac_file) do <<-EOS.strip_heredoc
|
6
|
+
function FindProxyForURL(url, host) {
|
7
|
+
return "DIRECT"
|
8
|
+
}
|
9
|
+
EOS
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:invalid_pac_file) do <<-EOS.strip_heredoc
|
13
|
+
function FindProxyForURL(url, host) {
|
14
|
+
EOS
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns true if file is valid' do
|
18
|
+
file = double('PacFile')
|
19
|
+
expect(file).to receive(:content).and_return(valid_pac_file)
|
20
|
+
validator = PacFileValidator.new
|
21
|
+
expect(validator.valid?(file)).to be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns true if file is invalid' do
|
25
|
+
file = double('PacFile')
|
26
|
+
expect(file).to receive(:content).and_return(invalid_pac_file)
|
27
|
+
validator = PacFileValidator.new
|
28
|
+
expect(validator.valid?(file)).to be_false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/pac_manager_spec.rb
CHANGED
@@ -3,9 +3,16 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe PacManager do
|
5
5
|
context '#find' do
|
6
|
+
let(:valid_pac_file) do <<-EOS.strip_heredoc
|
7
|
+
function FindProxyForURL(url, host) {
|
8
|
+
return "DIRECT"
|
9
|
+
}
|
10
|
+
EOS
|
11
|
+
end
|
12
|
+
|
6
13
|
it 'finds the file in given path' do
|
7
14
|
directory = create_directory 'pac_files'
|
8
|
-
file_path = create_file 'pac_files/file1.pac'
|
15
|
+
file_path = create_file 'pac_files/file1.pac', valid_pac_file
|
9
16
|
create_file 'pac_files/file2.pac'
|
10
17
|
|
11
18
|
manager = PacManager.new(directory)
|
@@ -19,9 +26,9 @@ describe PacManager do
|
|
19
26
|
expect(file.nil?).to be_true
|
20
27
|
end
|
21
28
|
|
22
|
-
it 'caches files'
|
29
|
+
it 'caches files' do
|
23
30
|
directory = create_directory 'pac_files'
|
24
|
-
file_path = create_file 'pac_files/file1.pac'
|
31
|
+
file_path = create_file 'pac_files/file1.pac', valid_pac_file
|
25
32
|
|
26
33
|
manager = PacManager.new(directory)
|
27
34
|
file = manager.find('file1')
|
@@ -32,5 +39,14 @@ describe PacManager do
|
|
32
39
|
file = manager.find('file1')
|
33
40
|
expect(file.path).to eq(file_path)
|
34
41
|
end
|
42
|
+
|
43
|
+
it 'ignores invalid pac files' do
|
44
|
+
directory = create_directory 'pac_files'
|
45
|
+
create_file 'pac_files/file1.pac', 'asdfasdf'
|
46
|
+
|
47
|
+
manager = PacManager.new(directory)
|
48
|
+
file = manager.find('file1.pac')
|
49
|
+
expect(file.nil?).to be_true
|
50
|
+
end
|
35
51
|
end
|
36
52
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: local_pac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -59,6 +59,54 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: uglifier
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: therubyracer
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: pac
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
62
110
|
description: ! 'This gem helps you to serve proxy.pacs locallly
|
63
111
|
|
64
112
|
'
|
@@ -82,9 +130,11 @@ files:
|
|
82
130
|
- files/proxy.pac
|
83
131
|
- lib/local_pac.rb
|
84
132
|
- lib/local_pac/file_server.rb
|
133
|
+
- lib/local_pac/java_script_compressor.rb
|
85
134
|
- lib/local_pac/logger.rb
|
86
135
|
- lib/local_pac/null_pac_file.rb
|
87
136
|
- lib/local_pac/pac_file.rb
|
137
|
+
- lib/local_pac/pac_file_validator.rb
|
88
138
|
- lib/local_pac/pac_manager.rb
|
89
139
|
- lib/local_pac/spec_helper.rb
|
90
140
|
- lib/local_pac/version.rb
|
@@ -95,14 +145,17 @@ files:
|
|
95
145
|
- share/systemd/local_pac.socket
|
96
146
|
- share/systemd/local_pac@.service
|
97
147
|
- spec/features/fetch_proxy_pac_spec.rb
|
148
|
+
- spec/java_script_compressor_spec.rb
|
98
149
|
- spec/null_pac_file_spec.rb
|
99
150
|
- spec/pac_file_spec.rb
|
151
|
+
- spec/pac_file_validator_spec.rb
|
100
152
|
- spec/pac_manager_spec.rb
|
101
153
|
- spec/spec_helper.rb
|
102
154
|
- spec/support/environment.rb
|
103
155
|
- spec/support/filesystem.rb
|
104
156
|
- spec/support/rack_test.rb
|
105
157
|
- spec/support/rspec.rb
|
158
|
+
- spec/support/string.rb
|
106
159
|
homepage: https://github.com/dg-vrnetze/local_pac
|
107
160
|
licenses:
|
108
161
|
- MIT
|
@@ -132,12 +185,15 @@ test_files:
|
|
132
185
|
- features/fetch_proxy_pac.feature
|
133
186
|
- features/support/env.rb
|
134
187
|
- spec/features/fetch_proxy_pac_spec.rb
|
188
|
+
- spec/java_script_compressor_spec.rb
|
135
189
|
- spec/null_pac_file_spec.rb
|
136
190
|
- spec/pac_file_spec.rb
|
191
|
+
- spec/pac_file_validator_spec.rb
|
137
192
|
- spec/pac_manager_spec.rb
|
138
193
|
- spec/spec_helper.rb
|
139
194
|
- spec/support/environment.rb
|
140
195
|
- spec/support/filesystem.rb
|
141
196
|
- spec/support/rack_test.rb
|
142
197
|
- spec/support/rspec.rb
|
198
|
+
- spec/support/string.rb
|
143
199
|
has_rdoc:
|