config_server_agent 0.3.3 → 0.3.4
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/CHANGELOG.md +4 -0
- data/config_server_agent.gemspec +2 -0
- data/lib/config_server_agent/version.rb +1 -1
- data/lib/config_server_agent.rb +62 -22
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 14de15ba41b3745d5e2bb54a29534d0a47aa58af4d5c029b2b9b611eec62865f
|
|
4
|
+
data.tar.gz: 9f45eb09fa4ee9d0b3b4c9d12e374b42e65350502cf5d4c27cbcbe95fff92cdd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d5c12f02a2b353c43b38a62823c08b9f94ad138346544b660d127d5ec5bb1b40024c0e2e1ba8b9d942ff0ad95da85992605847cd1ed0a8ca73581dccccb56327
|
|
7
|
+
data.tar.gz: 9d47199e4a9df1f295bfd29c598cd9fc8c5f4d8b701251378744198107e6dbd4a34a12d47406bc37142c7415b97659413e5afae2762172ad7ae7fdb9a5165dd2
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## 0.3.4 - 2019-06-12
|
|
8
|
+
### Changed
|
|
9
|
+
- Added optional token caching
|
|
10
|
+
|
|
7
11
|
## 0.3.3 - 2019-06-03
|
|
8
12
|
### Changed
|
|
9
13
|
- Added get_selected_config helper method
|
data/config_server_agent.gemspec
CHANGED
|
@@ -44,6 +44,8 @@ Gem::Specification.new do |spec|
|
|
|
44
44
|
|
|
45
45
|
spec.required_ruby_version = '>= 2.3.0'
|
|
46
46
|
|
|
47
|
+
spec.add_dependency 'lockfile', '~> 2.1'
|
|
48
|
+
|
|
47
49
|
spec.add_development_dependency 'bundler', '~> 1.17'
|
|
48
50
|
spec.add_development_dependency 'rake', '~> 10.0'
|
|
49
51
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
data/lib/config_server_agent.rb
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
require 'config_server_agent/version'
|
|
4
4
|
require 'net/http'
|
|
5
5
|
require 'json'
|
|
6
|
+
require 'digest/sha1'
|
|
7
|
+
require 'lockfile'
|
|
6
8
|
|
|
7
9
|
class ConfigServerAgent
|
|
8
10
|
class Error < StandardError; end
|
|
@@ -16,7 +18,9 @@ class ConfigServerAgent
|
|
|
16
18
|
config_server_host: ENV['CONFIG_SERVER_HOST'],
|
|
17
19
|
user_agent: "ConfigServerAgent/#{ConfigServerAgent::VERSION}",
|
|
18
20
|
user_agent_comment: nil,
|
|
19
|
-
token_ttl:
|
|
21
|
+
token_ttl: nil,
|
|
22
|
+
use_cache: false,
|
|
23
|
+
cache_file: nil
|
|
20
24
|
)
|
|
21
25
|
@auth0_client_id = auth0_client_id or raise ArgumentError, 'Missing auth0_client_id parameter'
|
|
22
26
|
@auth0_client_secret = auth0_client_secret or raise ArgumentError, 'Missing auth0_client_secret parameter'
|
|
@@ -30,9 +34,13 @@ class ConfigServerAgent
|
|
|
30
34
|
@user_agent = user_agent
|
|
31
35
|
@user_agent += " (#{user_agent_comment})" if user_agent_comment
|
|
32
36
|
|
|
33
|
-
@
|
|
34
|
-
@token
|
|
35
|
-
@token_ttl
|
|
37
|
+
@token_expires = nil
|
|
38
|
+
@token = nil
|
|
39
|
+
@token_ttl = token_ttl
|
|
40
|
+
@token_buffer = 10
|
|
41
|
+
|
|
42
|
+
@use_cache = use_cache
|
|
43
|
+
@cache_file = cache_file || '/tmp/' + Digest::SHA1.hexdigest("#{auth0_client_id}/#{ConfigServerAgent::VERSION}") + '.json'
|
|
36
44
|
end
|
|
37
45
|
|
|
38
46
|
def get_config
|
|
@@ -107,30 +115,62 @@ class ConfigServerAgent
|
|
|
107
115
|
end
|
|
108
116
|
|
|
109
117
|
def get_token
|
|
110
|
-
if @token.nil?
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
request['content-type'] = 'application/json'
|
|
118
|
-
request.body = {
|
|
119
|
-
client_id: @auth0_client_id,
|
|
120
|
-
client_secret: @auth0_client_secret,
|
|
121
|
-
audience: @config_server_audience,
|
|
122
|
-
grant_type: 'client_credentials',
|
|
123
|
-
}.to_json
|
|
124
|
-
|
|
125
|
-
response = http.request request
|
|
126
|
-
@token = JSON.parse(response.read_body)["access_token"] or raise Error, "No token from #{@auth0_host}"
|
|
127
|
-
@token_timestamp = Time.now.to_i + @token_ttl
|
|
118
|
+
if @token.nil? and @use_cache
|
|
119
|
+
read_token_cache
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if @token.nil? or (@token_expires and @token_expires < Time.now.to_i)
|
|
123
|
+
request_new_token
|
|
124
|
+
write_token_cache if @use_cache
|
|
128
125
|
end
|
|
129
126
|
|
|
127
|
+
@token
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def request_new_token
|
|
131
|
+
url = URI "https://#{@auth0_host}/oauth/token"
|
|
132
|
+
http = Net::HTTP.new url.host, url.port
|
|
133
|
+
http.use_ssl = url.scheme == 'https'
|
|
134
|
+
|
|
135
|
+
request = Net::HTTP::Post.new url
|
|
136
|
+
request['user-agent'] = @user_agent
|
|
137
|
+
request['content-type'] = 'application/json'
|
|
138
|
+
request.body = {
|
|
139
|
+
client_id: @auth0_client_id,
|
|
140
|
+
client_secret: @auth0_client_secret,
|
|
141
|
+
audience: @config_server_audience,
|
|
142
|
+
grant_type: 'client_credentials',
|
|
143
|
+
}.to_json
|
|
144
|
+
|
|
145
|
+
response = JSON.parse http.request(request).read_body
|
|
146
|
+
@token = response['access_token'] or raise Error, "No token from #{@auth0_host}"
|
|
147
|
+
@token_expires = Time.now.to_i + (@token_ttl || response['expires_in']) - @token_buffer
|
|
148
|
+
|
|
130
149
|
@token
|
|
131
150
|
|
|
132
151
|
rescue JSON::ParserError
|
|
133
152
|
raise Error, "Invalid response from #{@auth0_host}"
|
|
134
153
|
end
|
|
135
154
|
|
|
155
|
+
def read_token_cache
|
|
156
|
+
with_lock do
|
|
157
|
+
@token, @token_expires = JSON.parse(File.read @cache_file).values_at 'token', 'token_expires'
|
|
158
|
+
end if File.file? @cache_file
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def write_token_cache
|
|
162
|
+
with_lock do
|
|
163
|
+
File.write(@cache_file, {
|
|
164
|
+
'token' => @token,
|
|
165
|
+
'token_expires' => @token_expires
|
|
166
|
+
}.to_json)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def with_lock
|
|
171
|
+
Lockfile.new("/var/lock/config_server_agent.rb.lock", retries: 3, poll_retries: 3) do
|
|
172
|
+
yield
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
136
176
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: config_server_agent
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aidan Samuel
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-06-
|
|
11
|
+
date: 2019-06-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: lockfile
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '2.1'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '2.1'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: bundler
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|