rack-traffic-signal 0.1.3 → 0.1.4

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: d81e73362fc51012e7b7a8afa97aaa6c6cf7e6ca
4
- data.tar.gz: 0d0bee67463dfebd1a6f8a5437be44e7e98ae295
3
+ metadata.gz: 59e7a61c57604b1e7f3cc8503e35b062b1a49825
4
+ data.tar.gz: 0af4ffecc85271154d8f80e6fbc110d175e8651a
5
5
  SHA512:
6
- metadata.gz: eabdc1b337cb4c8e391c28ee498c83f49aba1ab79335e3d556d0b5f13815c1faafd6d7a148bbf97d6dd5d4e9dd0670fd0af5a50f2f86012b1f32ac669bd1d5b5
7
- data.tar.gz: 9b4b3f88db9010f8bc0cfae25b9f38cdc7f27e2892e97140c15c3c7194119bd4fd402c2be5d04ac4a19656dec32be465dd922aed0cc5ceee5575d4bc466c2167
6
+ metadata.gz: cccc66a6eb11d834c5c3c9f8109229fee675a65cbb7401f49cb4397bbde328afc537dbad3d5be9ded47206fba764d006eed0470a09b0bd8d3aa2dbf4d3f6cf69
7
+ data.tar.gz: ee9820ebbe3137827f3fdd12e9e4b6747ab5c4093c30e5dbadd7945e401268185f6ea8ee244b8a62d1a2dd8c66e70ae7ff87714cc9a2f8ef782e1c34b0aa5acd
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /vendor/bundle
10
11
 
11
12
  # rspec failure tracking
12
13
  .rspec_status
data/README.md CHANGED
@@ -57,6 +57,11 @@ Rack::TrafficSignal.setup do |config|
57
57
  # Only add path to this option, mantenance mode is not skipped.
58
58
  config.skip_paths = [/^\/users\/12345/]
59
59
 
60
+ # This config is used to skip_path? method.
61
+ # Only add path to this option, mantenance mode is not skipped.
62
+ # If request header has `X-RACK-TRAFFIC-SIGNAL-SECRET=<secret word>`, Rack::TrafficSignal.has_secret returns true.
63
+ config.secret_word = 'secret'
64
+
60
65
  # Default setting
61
66
  config.default_status = 503
62
67
  config.default_content_type = 'application/json'
@@ -14,6 +14,14 @@ module Rack
14
14
  @config ||= Config.new
15
15
  end
16
16
 
17
+ def self.skip?(env)
18
+ config.skip_proc.call(env)
19
+ end
20
+
21
+ def self.skip_with_warning?(env)
22
+ config.skip_with_warning_proc.call(env)
23
+ end
24
+
17
25
  def self.internal_access?(env)
18
26
  remote_ip = IPAddress(request_from(env))
19
27
  config.internal_ips
@@ -21,6 +29,10 @@ module Rack
21
29
  .any? { |internal_ip| internal_ip.include?(remote_ip) if remote_ip.class == internal_ip.class }
22
30
  end
23
31
 
32
+ def self.has_secret_word?(env)
33
+ env.fetch('HTTP_X_RACK_TRAFFIC_SIGNAL_SECRET', nil) == config.secret_word
34
+ end
35
+
24
36
  def self.skip_path?(env)
25
37
  path = env['PATH_INFO']
26
38
  path = path.chop if path[-1] == '/'
@@ -9,7 +9,10 @@ module Rack
9
9
  :skip_paths,
10
10
  :default_status,
11
11
  :default_content_type,
12
- :default_body
12
+ :default_body,
13
+ :secret_word,
14
+ :skip_proc,
15
+ :skip_with_warning_proc
13
16
 
14
17
  def initialize
15
18
  @internal_ips = []
@@ -17,6 +20,7 @@ module Rack
17
20
  @default_status = 503
18
21
  @default_content_type = 'application/json'
19
22
  @default_body = ''
23
+ @secret_word = ''
20
24
  @skip_paths = [/^\/assets/]
21
25
  @maintenance_status_proc = ->{ [] }
22
26
  @skip_proc = ->(env){ false }
@@ -45,18 +49,10 @@ module Rack
45
49
  @skip_proc = block
46
50
  end
47
51
 
48
- def skip?(env)
49
- @skip_proc.call(env)
50
- end
51
-
52
52
  def skip_with_warning_by(&block)
53
53
  @skip_with_warning_proc = block
54
54
  end
55
55
 
56
- def skip_with_warning?(env)
57
- @skip_with_warning_proc.call(env)
58
- end
59
-
60
56
  private
61
57
  def valid_maintenance_group?(mg)
62
58
  return false unless mg.is_a? Hash
@@ -8,7 +8,7 @@ module Rack
8
8
  end
9
9
 
10
10
  def call(env)
11
- return @app.call(env) if config.skip?(env)
11
+ return @app.call(env) if Rack::TrafficSignal.skip?(env)
12
12
  method = env['REQUEST_METHOD'].downcase.to_sym
13
13
  path = env['PATH_INFO']
14
14
  path = path.chop if path != '/' && path[-1] == '/'
@@ -16,7 +16,7 @@ module Rack
16
16
  applied_config = maintenance_application(method, path)
17
17
 
18
18
  if applied_config
19
- if config.skip_with_warning?(env)
19
+ if Rack::TrafficSignal.skip_with_warning?(env)
20
20
  @app.call(env).tap do |status, headers, body|
21
21
  headers['X-RACK-TRAFFIC-SIGNAL-MAINTENENCE'] = '1'
22
22
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module TrafficSignal
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-traffic-signal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - keigo yamamoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-13 00:00:00.000000000 Z
11
+ date: 2018-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ipaddress
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  version: '0'
142
142
  requirements: []
143
143
  rubyforge_project:
144
- rubygems_version: 2.4.5.1
144
+ rubygems_version: 2.6.12
145
145
  signing_key:
146
146
  specification_version: 4
147
147
  summary: Traffic signal of rack application