faraday-restrict-ip-addresses 0.0.2 → 0.1.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1871dc387a015770b7430ad24a714b444b49d5a2
|
4
|
+
data.tar.gz: 1279fa86ad652c4bd6f89f069e711e433ca9848c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bafcae7575b7fe850f6f63de7a84f60fdee1e9049794a569282bda081c9c84c7bc513ccd9d1ccea860e873d8b4716eb0b269bea0a67c5397eb0b7113554c290f
|
7
|
+
data.tar.gz: a7b797a8fb5aa51ed2ff856e57c2220a40ff81fc6da8c44bdde17447a25a4142fddd017cce9a9a6d190dafec0513844a85390cba2e8c04e333c01f96d7597cd5
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Usage
|
|
14
14
|
```ruby
|
15
15
|
faraday = Faraday.new do |builder|
|
16
16
|
builder.request :url_encoded
|
17
|
-
builder.
|
17
|
+
builder.request :restrict_ip_addresses, deny_rfc6890: true,
|
18
18
|
allow_localhost: true,
|
19
19
|
deny: ['8.0.0.0/8',
|
20
20
|
'224.0.0.0/7'],
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require_relative 'lib/faraday/restrict_ip_addresses'
|
1
|
+
require_relative 'lib/faraday/restrict_ip_addresses/version'
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
|
-
spec.add_dependency 'faraday',
|
4
|
+
spec.add_dependency 'faraday', '~>0.9.0'
|
5
5
|
spec.add_development_dependency 'bundler', '~> 1.0'
|
6
6
|
spec.authors = ["Ben Lavender"]
|
7
7
|
spec.description = %q{Restrict the IP addresses Faraday will connect to}
|
@@ -1,10 +1,9 @@
|
|
1
|
-
require 'faraday'
|
1
|
+
require 'faraday/restrict_ip_addresses/version'
|
2
2
|
require 'ipaddr'
|
3
3
|
|
4
4
|
module Faraday
|
5
5
|
class RestrictIPAddresses < Faraday::Middleware
|
6
6
|
class AddressNotAllowed < Faraday::Error::ClientError ; end
|
7
|
-
VERSION = '0.0.2'
|
8
7
|
|
9
8
|
RFC_1918_NETWORKS = %w(
|
10
9
|
127.0.0.0/8
|
@@ -48,7 +47,7 @@ module Faraday
|
|
48
47
|
end
|
49
48
|
|
50
49
|
def denied?(env)
|
51
|
-
addresses(env[:url].
|
50
|
+
addresses(env[:url].hostname).any? { |a| denied_ip?(a) }
|
52
51
|
end
|
53
52
|
|
54
53
|
def denied_ip?(address)
|
@@ -60,9 +59,11 @@ module Faraday
|
|
60
59
|
end
|
61
60
|
|
62
61
|
def addresses(hostname)
|
63
|
-
|
62
|
+
Addrinfo.getaddrinfo(hostname, nil, :UNSPEC, :STREAM).map { |a| IPAddr.new(a.ip_address) }
|
63
|
+
rescue SocketError => e
|
64
|
+
# In case of invalid hostname, return an empty list of addresses
|
65
|
+
[]
|
64
66
|
end
|
65
67
|
end
|
66
|
-
|
67
|
-
register_middleware restrict_ip_addresses: lambda { RestrictIPAddresses }
|
68
|
+
Request.register_middleware restrict_ip_addresses: lambda { RestrictIPAddresses }
|
68
69
|
end
|
@@ -8,15 +8,9 @@ describe Faraday::RestrictIPAddresses do
|
|
8
8
|
|
9
9
|
def allowed(*addresses)
|
10
10
|
url = URI.parse("http://test.com")
|
11
|
-
ips
|
11
|
+
ips = addresses.map { |add| Addrinfo.tcp(add, nil) }
|
12
12
|
|
13
|
-
|
14
|
-
# other socket information, whatever. We ignore it all internally and return
|
15
|
-
# only valid ipv4 addresses, so just append what we're checking to some
|
16
|
-
# garbage data like we expect.
|
17
|
-
return_addresses = ['garbage', [], 30]
|
18
|
-
return_addresses += ips
|
19
|
-
Socket.expects(:gethostbyname).with(url.host).returns(return_addresses)
|
13
|
+
Addrinfo.expects(:getaddrinfo).with(url.host, nil, :UNSPEC, :STREAM).returns(ips)
|
20
14
|
|
21
15
|
env = { url: url }
|
22
16
|
@rip.call(env)
|
@@ -92,4 +86,33 @@ describe Faraday::RestrictIPAddresses do
|
|
92
86
|
denied '192.168.13.14'
|
93
87
|
end
|
94
88
|
|
89
|
+
it "blacklists normalized values" do
|
90
|
+
middleware deny_rfc6890: true,
|
91
|
+
allow_localhost: false
|
92
|
+
|
93
|
+
denied '0'
|
94
|
+
denied '0x0'
|
95
|
+
denied '0x00.0'
|
96
|
+
denied '00.0'
|
97
|
+
denied '127.0.0.1'
|
98
|
+
denied '0x7f.1'
|
99
|
+
denied '0177.1'
|
100
|
+
end
|
101
|
+
|
102
|
+
it "allows addresses for which DNS fails" do
|
103
|
+
middleware deny_rfc1918: true,
|
104
|
+
deny: ['8.0.0.0/8'],
|
105
|
+
allow: ['8.5.0.0/24', '192.168.14.0/24']
|
106
|
+
url = URI.parse("http://thisisanonexistinghostname.com")
|
107
|
+
Addrinfo.expects(:getaddrinfo).with(url.host, nil, :UNSPEC, :STREAM).raises(SocketError)
|
108
|
+
@rip.call(url: url)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "works for IPV6 localhost addresses" do
|
112
|
+
middleware allow_localhost: false,
|
113
|
+
deny: ['::1']
|
114
|
+
|
115
|
+
denied '::1'
|
116
|
+
denied '0:0:0:0:0:0:0:1'
|
117
|
+
end
|
95
118
|
end
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday-restrict-ip-addresses
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Lavender
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.8'
|
20
|
-
- - "<"
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 0.9.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0.8'
|
30
|
-
- - "<"
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: 0.9.0
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: bundler
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -55,6 +49,7 @@ files:
|
|
55
49
|
- UNLICENSE
|
56
50
|
- faraday-restrict-ip-addresses.gemspec
|
57
51
|
- lib/faraday/restrict_ip_addresses.rb
|
52
|
+
- lib/faraday/restrict_ip_addresses/version.rb
|
58
53
|
- spec/restrict_ip_addresses_spec.rb
|
59
54
|
- spec/spec_helper.rb
|
60
55
|
homepage: https://github.com/bhuga/faraday-restrict-ip-addresses
|