liveness 0.2.2 → 0.3.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 +4 -4
- data/Gemfile.lock +28 -27
- data/README.md +19 -1
- data/lib/liveness/access.rb +66 -0
- data/lib/liveness/config.rb +4 -0
- data/lib/liveness/status.rb +20 -1
- data/lib/liveness/version.rb +1 -1
- data/lib/liveness.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 630199531d58103ad49748b74a839676e701ac9e85efb7f2880f9242b66ae30b
|
4
|
+
data.tar.gz: 11efa4ea8d069d8fcd1d132eeaad736b2f3755ee390ea147b40843b68795a202
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e22c3008961610bb37e82ece2372c4b66899a0990d93164cdbbc16620e44958fe26571075ac1ade583391a7d13a3f04792efae5a710f3ba14a778e9c520be88
|
7
|
+
data.tar.gz: d23c983e988c45bf0a3e4b438c29e72b391c8af559b6f1d448479dbe91a9637c0c0c35de8e7a57eb157720e68f30461ab8f6e6ffd36a76d611d753337c98dba4
|
data/Gemfile.lock
CHANGED
@@ -1,59 +1,59 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
liveness (0.
|
4
|
+
liveness (0.3.2)
|
5
5
|
rack (>= 1.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
ast (2.4.2)
|
11
|
-
bundler-audit (0.9.
|
11
|
+
bundler-audit (0.9.1)
|
12
12
|
bundler (>= 1.2.0, < 3)
|
13
13
|
thor (~> 1.0)
|
14
14
|
childprocess (4.1.0)
|
15
15
|
diff-lcs (1.5.0)
|
16
16
|
docile (1.4.0)
|
17
17
|
iniparse (1.5.0)
|
18
|
-
overcommit (0.
|
18
|
+
overcommit (0.59.1)
|
19
19
|
childprocess (>= 0.6.3, < 5)
|
20
20
|
iniparse (~> 1.4)
|
21
21
|
rexml (~> 3.2)
|
22
|
-
parallel (1.
|
23
|
-
parser (3.1.
|
22
|
+
parallel (1.22.1)
|
23
|
+
parser (3.1.2.0)
|
24
24
|
ast (~> 2.4.1)
|
25
|
-
rack (2.2.3)
|
25
|
+
rack (2.2.3.1)
|
26
26
|
rainbow (3.1.1)
|
27
27
|
rake (13.0.6)
|
28
|
-
regexp_parser (2.
|
28
|
+
regexp_parser (2.4.0)
|
29
29
|
rexml (3.2.5)
|
30
|
-
rspec (3.
|
31
|
-
rspec-core (~> 3.
|
32
|
-
rspec-expectations (~> 3.
|
33
|
-
rspec-mocks (~> 3.
|
34
|
-
rspec-core (3.
|
35
|
-
rspec-support (~> 3.
|
36
|
-
rspec-expectations (3.
|
30
|
+
rspec (3.11.0)
|
31
|
+
rspec-core (~> 3.11.0)
|
32
|
+
rspec-expectations (~> 3.11.0)
|
33
|
+
rspec-mocks (~> 3.11.0)
|
34
|
+
rspec-core (3.11.0)
|
35
|
+
rspec-support (~> 3.11.0)
|
36
|
+
rspec-expectations (3.11.0)
|
37
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
-
rspec-support (~> 3.
|
39
|
-
rspec-mocks (3.
|
38
|
+
rspec-support (~> 3.11.0)
|
39
|
+
rspec-mocks (3.11.1)
|
40
40
|
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
-
rspec-support (~> 3.
|
42
|
-
rspec-support (3.
|
43
|
-
rubocop (1.
|
41
|
+
rspec-support (~> 3.11.0)
|
42
|
+
rspec-support (3.11.0)
|
43
|
+
rubocop (1.30.0)
|
44
44
|
parallel (~> 1.10)
|
45
|
-
parser (>= 3.
|
45
|
+
parser (>= 3.1.0.0)
|
46
46
|
rainbow (>= 2.2.2, < 4.0)
|
47
47
|
regexp_parser (>= 1.8, < 3.0)
|
48
|
-
rexml
|
49
|
-
rubocop-ast (>= 1.
|
48
|
+
rexml (>= 3.2.5, < 4.0)
|
49
|
+
rubocop-ast (>= 1.18.0, < 2.0)
|
50
50
|
ruby-progressbar (~> 1.7)
|
51
51
|
unicode-display_width (>= 1.4.0, < 3.0)
|
52
|
-
rubocop-ast (1.
|
53
|
-
parser (>= 3.
|
52
|
+
rubocop-ast (1.18.0)
|
53
|
+
parser (>= 3.1.1.0)
|
54
54
|
rubocop-rake (0.6.0)
|
55
55
|
rubocop (~> 1.0)
|
56
|
-
rubocop-rspec (2.
|
56
|
+
rubocop-rspec (2.11.1)
|
57
57
|
rubocop (~> 1.19)
|
58
58
|
ruby-progressbar (1.11.0)
|
59
59
|
simplecov (0.21.2)
|
@@ -61,12 +61,13 @@ GEM
|
|
61
61
|
simplecov-html (~> 0.11)
|
62
62
|
simplecov_json_formatter (~> 0.1)
|
63
63
|
simplecov-html (0.12.3)
|
64
|
-
simplecov_json_formatter (0.1.
|
64
|
+
simplecov_json_formatter (0.1.4)
|
65
65
|
thor (1.2.1)
|
66
66
|
unicode-display_width (2.1.0)
|
67
67
|
|
68
68
|
PLATFORMS
|
69
69
|
x86_64-darwin-20
|
70
|
+
x86_64-darwin-21
|
70
71
|
x86_64-linux
|
71
72
|
|
72
73
|
DEPENDENCIES
|
@@ -81,4 +82,4 @@ DEPENDENCIES
|
|
81
82
|
simplecov
|
82
83
|
|
83
84
|
BUNDLED WITH
|
84
|
-
2.
|
85
|
+
2.3.14
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
Liveness [](https://github.com/elct9620/liveness/actions/workflows/main.yml)
|
2
|
+
===
|
2
3
|
|
3
4
|
The Rack middleware to provide health check endpoints.
|
4
5
|
|
@@ -28,6 +29,23 @@ Liveness.config do |c|
|
|
28
29
|
c.add :postgres, name: :read_replica, timeout: 10
|
29
30
|
end
|
30
31
|
```
|
32
|
+
### Access Protected
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
Liveness.config do |c|
|
36
|
+
c.token = 'unm@tnh8ugq-WAR-myr'
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
To access the status endpoint should add `?token=unm@tnh8ugq-WAR-myr` params to access it.
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
Liveness.config do |c|
|
44
|
+
c.ip_whitelist = ['192.168.0.0/24']
|
45
|
+
end
|
46
|
+
```
|
47
|
+
|
48
|
+
To access the status endpoint should called from `127.0.0.1` or `::1` or under `192.168.0.0/24`.
|
31
49
|
|
32
50
|
### Customize Connector
|
33
51
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ipaddr'
|
4
|
+
|
5
|
+
module Liveness
|
6
|
+
# Access Control
|
7
|
+
#
|
8
|
+
# @since 0.3.0
|
9
|
+
class Access
|
10
|
+
# @since 0.3.2
|
11
|
+
LOCAL_IPV4 = IPAddr.new('127.0.0.1')
|
12
|
+
LOCAL_IPV6 = IPAddr.new('::1')
|
13
|
+
|
14
|
+
# @param request [Rack::Request]
|
15
|
+
# @param config [Liveness::Config]
|
16
|
+
#
|
17
|
+
# @since 0.3.0
|
18
|
+
def initialize(request, config:)
|
19
|
+
@request = request
|
20
|
+
@config = config
|
21
|
+
end
|
22
|
+
|
23
|
+
# Is allowed to access
|
24
|
+
#
|
25
|
+
# @return [Boolean]
|
26
|
+
#
|
27
|
+
# @since 0.3.0
|
28
|
+
def allowed?
|
29
|
+
local? || (whitelist? && valid_token?)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Is token valid
|
33
|
+
#
|
34
|
+
# @return [Boolean]
|
35
|
+
#
|
36
|
+
# @since 0.3.0
|
37
|
+
def valid_token?
|
38
|
+
return true if @config.token.nil?
|
39
|
+
|
40
|
+
@config.token == @request.params['token']
|
41
|
+
end
|
42
|
+
|
43
|
+
# Is from localhost
|
44
|
+
#
|
45
|
+
# @return [Boolean]
|
46
|
+
#
|
47
|
+
# @since 0.3.2
|
48
|
+
def local?
|
49
|
+
LOCAL_IPV4.include?(@request.ip) || LOCAL_IPV6.include?(@request.ip)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Is ip in whitelist
|
53
|
+
#
|
54
|
+
# @return [Boolean]
|
55
|
+
#
|
56
|
+
# @sicne 0.3.0
|
57
|
+
def whitelist?
|
58
|
+
return true if @config.ip_whitelist.empty?
|
59
|
+
|
60
|
+
@config
|
61
|
+
.ip_whitelist
|
62
|
+
.map { |ip| IPAddr.new(ip) }
|
63
|
+
.reduce(true) { |curr, addr| curr & addr.include?(@request.ip) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/liveness/config.rb
CHANGED
@@ -8,12 +8,16 @@ module Liveness
|
|
8
8
|
# @since 0.1.0
|
9
9
|
attr_reader :dependencies
|
10
10
|
|
11
|
+
# @since 0.3.0
|
12
|
+
attr_accessor :token, :ip_whitelist
|
13
|
+
|
11
14
|
# @return [Liveness::Config]
|
12
15
|
#
|
13
16
|
# @since 0.1.0
|
14
17
|
def initialize(container: Liveness.container, &block)
|
15
18
|
@container = container
|
16
19
|
@dependencies = []
|
20
|
+
@ip_whitelist = []
|
17
21
|
|
18
22
|
instance_exec(self, &block) if defined?(yield)
|
19
23
|
end
|
data/lib/liveness/status.rb
CHANGED
@@ -12,11 +12,18 @@ module Liveness
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
# @since 0.3.0
|
16
|
+
HEADERS = { 'Content-Type' => 'application/json' }.freeze
|
17
|
+
|
18
|
+
# @since 0.3.0
|
19
|
+
FORBIDDEN_MESSAGE = { message: 'access denied' }.freeze
|
20
|
+
|
15
21
|
# @return [Liveness::Status]
|
16
22
|
#
|
17
23
|
# @since 0.1.0
|
18
24
|
def initialize(env, config: Liveness.config)
|
19
25
|
@env = env
|
26
|
+
@request = Rack::Request.new(env)
|
20
27
|
@config = config
|
21
28
|
end
|
22
29
|
|
@@ -47,11 +54,23 @@ module Liveness
|
|
47
54
|
#
|
48
55
|
# @since 0.1.0
|
49
56
|
def response
|
57
|
+
access = Access.new(@request, config: @config)
|
58
|
+
return forbidden unless access.allowed?
|
59
|
+
|
50
60
|
[
|
51
61
|
live? ? 200 : 503,
|
52
|
-
|
62
|
+
HEADERS.dup,
|
53
63
|
[metrics.to_json]
|
54
64
|
]
|
55
65
|
end
|
66
|
+
|
67
|
+
# @return [Rack::Response]
|
68
|
+
#
|
69
|
+
# @since 0.3.0
|
70
|
+
def forbidden
|
71
|
+
[
|
72
|
+
403, HEADERS.dup, [FORBIDDEN_MESSAGE.to_json]
|
73
|
+
]
|
74
|
+
end
|
56
75
|
end
|
57
76
|
end
|
data/lib/liveness/version.rb
CHANGED
data/lib/liveness.rb
CHANGED
@@ -6,6 +6,7 @@ require_relative 'liveness/version'
|
|
6
6
|
require_relative 'liveness/dependency'
|
7
7
|
require_relative 'liveness/container'
|
8
8
|
require_relative 'liveness/config'
|
9
|
+
require_relative 'liveness/access'
|
9
10
|
require_relative 'liveness/status'
|
10
11
|
|
11
12
|
# The Rack middleware to provide health check endpoints.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liveness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 蒼時弦也
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- bin/console
|
43
43
|
- bin/setup
|
44
44
|
- lib/liveness.rb
|
45
|
+
- lib/liveness/access.rb
|
45
46
|
- lib/liveness/config.rb
|
46
47
|
- lib/liveness/container.rb
|
47
48
|
- lib/liveness/dependencies.rb
|
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
74
|
- !ruby/object:Gem::Version
|
74
75
|
version: '0'
|
75
76
|
requirements: []
|
76
|
-
rubygems_version: 3.
|
77
|
+
rubygems_version: 3.1.6
|
77
78
|
signing_key:
|
78
79
|
specification_version: 4
|
79
80
|
summary: The Rack middleware to provide health check endpoints.
|