floodgate 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57d84b07c086519871b5bc1fc9d9c91bf9345b7e
4
- data.tar.gz: 02ef6c3e9fafe9e509be2ba120d7407eb9e33b8d
3
+ metadata.gz: b9db86194f10be4b4ce921bb9964d0c3600e4b2d
4
+ data.tar.gz: c9b0fafb0e2455a4db2d5c3629798ce7e5edcb45
5
5
  SHA512:
6
- metadata.gz: 9e5ce474d5eb2d25ecc39001573cb155d996049a435da1e65b726b0b7d1de93bf76b2b0e20f296a24ec8d20591c583d4a8c61ba094b24221ba105bf8e85158da
7
- data.tar.gz: 51649d87130c0bba9e9a0d7f6b9207ad5ef80b9b9389b0dde09da1cbfb04cafab7ed1e371a3d6889b322b893dfffd31261e497438aa39290d9ea92105998abfb
6
+ metadata.gz: fbd81c3f94ca145f550f6d5e8986e3d19bc6f14f1420b9a6028e2109d0ba51cd03770a8dbdf824616ebd1ca1fb87b1a04f59fc4e36601dd63dbb14006af497b1
7
+ data.tar.gz: 98ce680b053a23e15d2e5c49faeeb0e1f700c323443491491b879633045611600c0368ef016c79dcc2c18274816b662933f011a93088d3f0d81e8e6b0bcdbb33
data/floodgate.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
+ spec.add_development_dependency 'pry'
21
22
  spec.add_development_dependency 'rake'
22
23
  spec.add_development_dependency 'rspec', '~> 2.14'
23
24
  spec.add_development_dependency 'simplecov', '~> 0.8'
@@ -1,10 +1,11 @@
1
- # TODO: Use a real client real soon now, but not now
2
- require 'open-uri'
3
- require 'json'
4
-
5
1
  module Floodgate
6
2
  class Config
7
- attr_accessor :app_id, :api_token, :filter_traffic, :redirect_url
3
+ attr_accessor \
4
+ :allowed_ip_addresses,
5
+ :api_token,
6
+ :app_id,
7
+ :filter_traffic,
8
+ :redirect_url
8
9
 
9
10
  def initialize(app_id, api_token)
10
11
  @app_id = app_id
@@ -14,16 +15,19 @@ module Floodgate
14
15
 
15
16
  @filter_traffic = json['filter_traffic']
16
17
  @redirect_url = json['redirect_url']
18
+ @allowed_ip_addresses = json['allowed_ip_addresses'] || []
17
19
  end
18
20
 
19
- def redirect?
20
- !redirect_url.nil? && !redirect_url.empty?
21
+ def ip_address_allowed?(ip_address)
22
+ allowed_ip_addresses.include?(ip_address)
21
23
  end
22
24
 
23
25
  def filter_traffic?(env)
24
- filter_traffic
26
+ filter_traffic && !ip_address_allowed?(env['REMOTE_ADDR'])
27
+ end
25
28
 
26
- # TODO: Use env
29
+ def redirect?
30
+ !redirect_url.nil? && !redirect_url.empty?
27
31
  end
28
32
  end
29
33
  end
@@ -1,3 +1,3 @@
1
1
  module Floodgate
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -6,33 +6,126 @@ module Floodgate
6
6
 
7
7
  let(:json) do
8
8
  {
9
+ 'allowed_ip_addresses' => allowed_ip_addresses,
9
10
  'filter_traffic' => filter_traffic,
10
- 'redirect_url' => redirect_url
11
+ 'redirect_url' => redirect_url,
11
12
  }
12
13
  end
13
14
 
15
+ let(:allowed_ip_addresses) { [] }
14
16
  let(:filter_traffic) { false }
15
17
  let(:redirect_url) { nil }
18
+
16
19
  let(:app_id) { 'abc123' }
17
20
  let(:api_token) { 'def456' }
18
21
  let(:config) { Config.new(app_id, api_token) }
19
22
 
20
- context 'when redirect_url is an empty string' do
21
- let(:filter_traffic) { false }
22
- let(:redirect_url) { '' }
23
+ describe '#ip_address_allowed?' do
24
+ context 'when the allowed ip address list is nil' do
25
+ let(:allowed_ip_addresses) { nil }
26
+ let(:ip_address) { '127.0.0.1' }
23
27
 
24
- describe '#redirect?' do
25
28
  it 'is false' do
26
- expect(config.redirect?).to be_false
29
+ expect(config.ip_address_allowed?(ip_address)).to be_false
30
+ end
31
+ end
32
+
33
+ context 'when the allowed ip address list is empty' do
34
+ let(:allowed_ip_addresses) { [] }
35
+ let(:ip_address) { '127.0.0.1' }
36
+
37
+ it 'is false' do
38
+ expect(config.ip_address_allowed?(ip_address)).to be_false
39
+ end
40
+ end
41
+
42
+ context 'when there are allowed ip addresses' do
43
+ let(:allowed_ip_addresses) { %w(198.81.129.107) }
44
+
45
+ context 'and the specified ip address is in the list' do
46
+ let(:ip_address) { '198.81.129.107' }
47
+
48
+ it 'is true' do
49
+ expect(config.ip_address_allowed?(ip_address)).to be_true
50
+ end
51
+ end
52
+
53
+ context 'but the specified ip address is not in the list' do
54
+ let(:ip_address) { '198.81.129.108' }
55
+
56
+ it 'is false' do
57
+ expect(config.ip_address_allowed?(ip_address)).to be_false
58
+ end
27
59
  end
28
60
  end
29
61
  end
30
62
 
31
- context 'when a redirect_url is specified' do
32
- let(:filter_traffic) { false }
33
- let(:redirect_url) { 'someurl' }
63
+ describe '#filter_traffic?' do
64
+ context 'when filter_traffic is false' do
65
+ let(:filter_traffic) { false }
66
+ let(:env) { Hash.new }
67
+
68
+ it 'is false' do
69
+ expect(config.filter_traffic?(env)).to be_false
70
+ end
71
+ end
72
+
73
+ context 'when filter_traffic is true' do
74
+ let(:filter_traffic) { true }
75
+
76
+ context 'and the ip address is not allowed' do
77
+ let(:env) do
78
+ {
79
+ 'REMOTE_ADDR' => '192.168.0.1'
80
+ }
81
+ end
82
+
83
+ let(:allowed_ip_addresses) { %w(127.0.0.1) }
84
+
85
+ it 'is true' do
86
+ expect(config.filter_traffic?(env)).to be_true
87
+ end
88
+ end
89
+
90
+ context 'and the ip address is allowed' do
91
+ let(:env) do
92
+ {
93
+ 'REMOTE_ADDR' => '127.0.0.1'
94
+ }
95
+ end
96
+
97
+ let(:allowed_ip_addresses) { %w(127.0.0.1) }
98
+
99
+ it 'is false' do
100
+ expect(config.filter_traffic?(env)).to be_false
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ describe '#redirect?' do
107
+ context 'when redirect_url is nil' do
108
+ let(:filter_traffic) { false }
109
+ let(:redirect_url) { nil }
110
+
111
+ it 'is false' do
112
+ expect(config.redirect?).to be_false
113
+ end
114
+ end
115
+
116
+ context 'when redirect_url is an empty string' do
117
+ let(:filter_traffic) { false }
118
+ let(:redirect_url) { '' }
119
+
120
+ it 'is false' do
121
+ expect(config.redirect?).to be_false
122
+ end
123
+ end
124
+
125
+ context 'when a redirect_url is specified' do
126
+ let(:filter_traffic) { false }
127
+ let(:redirect_url) { 'someurl' }
34
128
 
35
- describe '#redirect?' do
36
129
  it 'is true' do
37
130
  expect(config.redirect?).to be_true
38
131
  end
@@ -5,12 +5,17 @@ module Floodgate
5
5
  let(:app) { double().as_null_object }
6
6
  let(:control) { Control.new(app, app_id, api_token) }
7
7
  let(:env) { Hash.new }
8
+
8
9
  let(:app_id) { 'abc123' }
9
10
  let(:api_token) { 'def456' }
11
+
12
+ let(:allowed_ip_addresses) { nil }
10
13
  let(:filter_traffic) { false }
11
14
  let(:redirect_url) { 'something' }
15
+
12
16
  let(:json) do
13
17
  {
18
+ 'allowed_ip_addresses' => allowed_ip_addresses,
14
19
  'filter_traffic' => filter_traffic,
15
20
  'redirect_url' => redirect_url
16
21
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: floodgate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark McEahern
@@ -11,6 +11,20 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2014-02-26 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: pry
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: rake
16
30
  requirement: !ruby/object:Gem::Requirement