alpaca 1.0.2 → 1.1.2
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
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5b83cdbfb00c2aaab10f5b06cd8b096019e7d500
|
4
|
+
data.tar.gz: 46728adbd38c82af38342fad4bae359eb4668c5e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e959f340854e63384d3e87c6bb2d819333698206627b32838c8af88b3e2bbc83a0508db965be49e1a60f65b20d09e72488daf3806caa20c32ae7f924be45f72b
|
7
|
+
data.tar.gz: b57f8032424964f876925ae488d7da00166b20e5433621d7b5a0983515d06f27feaf4e47f18bee653685ff9849dcc07becffd077707196cbd177ac81ced8cbc3
|
data/lib/rack/alpaca.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
module Rack
|
2
2
|
module Alpaca
|
3
3
|
class << self
|
4
|
+
|
4
5
|
attr_reader :whitelist, :blacklist
|
5
6
|
attr_accessor :default
|
6
7
|
|
7
8
|
def new (app)
|
9
|
+
@@config ||= YAML.load_file('config/alpaca.yml')
|
10
|
+
|
8
11
|
@app = app
|
9
|
-
config
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@default = config['default']
|
12
|
+
@whitelist ||= Hash[@@config['whitelist'].map { |ip| [IPAddr.new(ip), true] }].freeze
|
13
|
+
@blacklist ||= Hash[@@config['blacklist'].map { |ip| [IPAddr.new(ip), true] }].freeze
|
14
|
+
@default = @@config['default']
|
13
15
|
|
14
16
|
self
|
15
17
|
end
|
@@ -39,9 +41,12 @@ module Rack
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def check (type, req)
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
req_ip = IPAddr.new(req.ip)
|
45
|
+
!instance_variable_get("@#{type}").select { |k, v| k.include? req_ip }.empty?
|
46
|
+
#instance_variable_get("@#{type}")[req_ip]
|
47
|
+
#instance_variable_get("@#{type}").any? do |ip|
|
48
|
+
# ip.include?(req.ip)
|
49
|
+
#end
|
45
50
|
end
|
46
51
|
|
47
52
|
alias_method :whitelisted?, :check
|
data/lib/rack/alpaca/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Alpaca
|
2
2
|
module Generators
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
4
|
-
source_root File.expand_path('
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
5
|
|
6
6
|
desc 'Copies an Alpaca configuration file to your application.'
|
7
7
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# The defaults below are reserved IPv4 and IPv6 addresses used for testing.
|
2
|
+
# Replace the IP addresses in this configuration file with your own.
|
3
|
+
|
4
|
+
whitelist:
|
5
|
+
- 0.0.0.1
|
6
|
+
- 198.18.0.0/15
|
7
|
+
- "::/128"
|
8
|
+
blacklist:
|
9
|
+
- 0.0.0.1
|
10
|
+
- 0.0.0.2
|
11
|
+
- "2001:db8::/32"
|
12
|
+
default: allow
|
data/spec/rack_alpaca_spec.rb
CHANGED
@@ -13,13 +13,13 @@ describe 'Rack::Alpaca' do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should have a whitelist' do
|
16
|
-
Rack::Alpaca.whitelist.class.must_equal
|
17
|
-
Rack::Alpaca.whitelist.each { |ip| ip.class.must_equal IPAddr }
|
18
|
-
Rack::Alpaca.whitelist.must_equal @ips
|
16
|
+
Rack::Alpaca.whitelist.class.must_equal Hash
|
17
|
+
Rack::Alpaca.whitelist.each { |ip, v| ip.class.must_equal IPAddr }
|
18
|
+
Rack::Alpaca.whitelist.keys.must_equal @ips
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should permit IP addresses on the whitelist' do
|
22
|
-
Rack::Alpaca.whitelist.each do |ip|
|
22
|
+
Rack::Alpaca.whitelist.each do |ip, v|
|
23
23
|
get '/', {}, 'REMOTE_ADDR' => ip.to_s
|
24
24
|
last_response.status.must_equal 200
|
25
25
|
last_response.body.must_equal 'foo'
|
@@ -41,15 +41,15 @@ describe 'Rack::Alpaca' do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should have a blacklist' do
|
44
|
-
Rack::Alpaca.blacklist.class.must_equal
|
45
|
-
Rack::Alpaca.whitelist.each { |ip| ip.class.must_equal IPAddr }
|
46
|
-
Rack::Alpaca.blacklist.must_equal @ips
|
44
|
+
Rack::Alpaca.blacklist.class.must_equal Hash
|
45
|
+
Rack::Alpaca.whitelist.each { |ip, v| ip.class.must_equal IPAddr }
|
46
|
+
Rack::Alpaca.blacklist.keys.must_equal @ips
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'should reject IP addresses on the blacklist' do
|
50
|
-
Rack::Alpaca.blacklist.each do |ip|
|
50
|
+
Rack::Alpaca.blacklist.each do |ip, v|
|
51
51
|
get '/', {}, 'REMOTE_ADDR' => ip.to_s
|
52
|
-
unless Rack::Alpaca.whitelist.include? ip
|
52
|
+
unless Rack::Alpaca.whitelist.keys.include? ip
|
53
53
|
last_response.status.must_equal 503
|
54
54
|
last_response.body.must_equal "Request blocked\n"
|
55
55
|
end
|
metadata
CHANGED
@@ -1,110 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alpaca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jeff Chao
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: activesupport
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 3.0.0
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 3.0.0
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: minitest
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: rack-test
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
description: A rack middleware for whitelisting and blacklisting IPs
|
@@ -118,6 +105,7 @@ files:
|
|
118
105
|
- lib/rack/alpaca/version.rb
|
119
106
|
- lib/rack/alpaca.rb
|
120
107
|
- lib/rails/generators/alpaca/install/install_generator.rb
|
108
|
+
- lib/rails/generators/alpaca/install/templates/alpaca.yml
|
121
109
|
- Rakefile
|
122
110
|
- README.md
|
123
111
|
- spec/alpaca_controller_additions_spec.rb
|
@@ -131,28 +119,27 @@ files:
|
|
131
119
|
homepage: http://github.com/jeffchao/alpaca
|
132
120
|
licenses:
|
133
121
|
- MIT
|
122
|
+
metadata: {}
|
134
123
|
post_install_message:
|
135
124
|
rdoc_options:
|
136
125
|
- --charset=UTF-8
|
137
126
|
require_paths:
|
138
127
|
- lib
|
139
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
-
none: false
|
141
129
|
requirements:
|
142
|
-
- -
|
130
|
+
- - '>='
|
143
131
|
- !ruby/object:Gem::Version
|
144
132
|
version: 1.9.3
|
145
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
134
|
requirements:
|
148
|
-
- -
|
135
|
+
- - '>='
|
149
136
|
- !ruby/object:Gem::Version
|
150
137
|
version: '0'
|
151
138
|
requirements: []
|
152
139
|
rubyforge_project:
|
153
|
-
rubygems_version:
|
140
|
+
rubygems_version: 2.0.6
|
154
141
|
signing_key:
|
155
|
-
specification_version:
|
142
|
+
specification_version: 4
|
156
143
|
summary: Whitelist and blacklist IPs
|
157
144
|
test_files:
|
158
145
|
- spec/alpaca_controller_additions_spec.rb
|
@@ -163,4 +150,3 @@ test_files:
|
|
163
150
|
- spec/support/baz_controller.rb
|
164
151
|
- spec/support/filters.rb
|
165
152
|
- spec/support/foo_controller.rb
|
166
|
-
has_rdoc:
|