lhc 15.2.1 → 16.0.0.pre.pro2162
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/.rubocop.yml +1 -7
- data/README.md +5 -11
- data/lhc.gemspec +2 -3
- data/lib/lhc/error.rb +1 -1
- data/lib/lhc/interceptors/auth.rb +11 -9
- data/lib/lhc/interceptors/rollbar.rb +3 -12
- data/lib/lhc/request.rb +0 -1
- data/lib/lhc/response.rb +0 -6
- data/lib/lhc/scrubbers/headers_scrubber.rb +0 -1
- data/lib/lhc/version.rb +1 -1
- data/lib/lhc.rb +0 -5
- data/spec/error/to_s_spec.rb +3 -5
- data/spec/interceptors/auth/reauthentication_spec.rb +21 -22
- data/spec/interceptors/rollbar/main_spec.rb +1 -20
- data/spec/request/scrubbed_headers_spec.rb +0 -8
- data/spec/request/scrubbed_options_spec.rb +1 -21
- metadata +139 -36
- data/lib/lhc/scrubbers/cache_scrubber.rb +0 -35
- data/lib/lhc/scrubbers/effective_url_scrubber.rb +0 -32
- data/spec/response/scrubbed_options_spec.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 624333537e8e35fa6ece5b46b1748263e023b439060c8e8b6b7ca0572db52ead
|
4
|
+
data.tar.gz: 588b9c2328f9ef96fa6709d6d12580083712e863838cb6e3b75b9dfb2e0efe35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d038ab78edbddf4f9d3cd8c4f8dd85285448a79498df99f02e9893bf04a68a80fc17fa286555399752452c1e68701307eb2d45112df1bb31df7f96b81c531b23
|
7
|
+
data.tar.gz: d45a0a5e8990644c7748527affe7fcee24f481f10043f6368ca90a5bbe8b76ad6e32fbfecc85e65e8f21765799926576ad815f443b34617540b6da8594f66d2b
|
data/.rubocop.yml
CHANGED
@@ -26,9 +26,6 @@ require:
|
|
26
26
|
Bundler/OrderedGems:
|
27
27
|
Enabled: false
|
28
28
|
|
29
|
-
Gemspec/RequireMFA:
|
30
|
-
Enabled: false
|
31
|
-
|
32
29
|
Lint/SuppressedException:
|
33
30
|
Exclude:
|
34
31
|
- spec/**/*
|
@@ -263,7 +260,7 @@ Style/CaseLikeIf:
|
|
263
260
|
Enabled: false
|
264
261
|
|
265
262
|
Style/HashEachMethods:
|
266
|
-
Enabled: false
|
263
|
+
Enabled: false
|
267
264
|
|
268
265
|
Style/HashConversion: # (new in 1.10)
|
269
266
|
Enabled: false
|
@@ -271,9 +268,6 @@ Style/HashConversion: # (new in 1.10)
|
|
271
268
|
Style/NilLambda: # (new in 1.3)
|
272
269
|
Enabled: false
|
273
270
|
|
274
|
-
Style/OpenStructUse:
|
275
|
-
Enabled: false
|
276
|
-
|
277
271
|
RSpec/DescribeClass:
|
278
272
|
Exclude:
|
279
273
|
- spec/views/**/*
|
data/README.md
CHANGED
@@ -618,18 +618,12 @@ Adds the following to body of all requests:
|
|
618
618
|
|
619
619
|
##### Reauthenticate
|
620
620
|
|
621
|
-
The current implementation
|
622
|
-
Make sure that your interceptors contain `LHC::Auth` and `LHC::Retry`, whereas `LHC::Retry` comes _after_ `LHC::Auth` in the chain.
|
623
|
-
Provide the refresh token as following:
|
624
|
-
```ruby
|
625
|
-
LHC.get('http://local.ch', auth: { bearer: -> { access_token }, refresh_client_token: -> { TokenRefreshUtil.client_access_token(true) })
|
626
|
-
```
|
627
|
-
Where `TokenRefreshUtil.client_access_token(true)` forces a refresh of the token and returns the new token. It is also expected that this implementation will handle invalidating caches if necessary.
|
621
|
+
The current implementation can only offer reauthenticate for _client access tokens_. For this to work the following has to be given:
|
628
622
|
|
629
|
-
You
|
630
|
-
|
631
|
-
|
632
|
-
|
623
|
+
* You have configured and implemented `LHC::Auth.refresh_client_token = -> { TokenRefreshUtil.client_access_token(true) }` which when called will force a refresh of the token and return the new value. It is also expected that this implementation will handle invalidating caches if necessary.
|
624
|
+
* Your interceptors contain `LHC::Auth` and `LHC::Retry`, whereas `LHC::Retry` comes _after_ `LHC::Auth` in the chain.
|
625
|
+
|
626
|
+
##### Bearer Authentication with client access token
|
633
627
|
|
634
628
|
Reauthentication will be initiated if:
|
635
629
|
|
data/lhc.gemspec
CHANGED
@@ -15,7 +15,8 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.summary = 'Advanced HTTP Client for Ruby, fueled with interceptors'
|
16
16
|
s.description = 'LHC is an extended/advanced HTTP client. Implementing basic http-communication enhancements like interceptors, exception handling, format handling, accessing response data, configuring endpoints and placeholders and fully compatible, RFC-compliant URL-template support.'
|
17
17
|
|
18
|
-
s.files
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
19
20
|
s.require_paths = ['lib']
|
20
21
|
|
21
22
|
s.requirements << 'Ruby >= 2.0.0'
|
@@ -23,7 +24,6 @@ Gem::Specification.new do |s|
|
|
23
24
|
|
24
25
|
s.add_dependency 'activesupport', '>= 5.2'
|
25
26
|
s.add_dependency 'addressable'
|
26
|
-
s.add_dependency 'local_uri'
|
27
27
|
s.add_dependency 'typhoeus', '>= 0.11'
|
28
28
|
|
29
29
|
s.add_development_dependency 'geminabox'
|
@@ -35,7 +35,6 @@ Gem::Specification.new do |s|
|
|
35
35
|
s.add_development_dependency 'rubocop', '~> 1.0'
|
36
36
|
s.add_development_dependency 'rubocop-performance', '~> 1.0'
|
37
37
|
s.add_development_dependency 'rubocop-rspec', '~> 1.26.0'
|
38
|
-
s.add_development_dependency 'sprockets-rails'
|
39
38
|
s.add_development_dependency 'timecop'
|
40
39
|
s.add_development_dependency 'webmock'
|
41
40
|
|
data/lib/lhc/error.rb
CHANGED
@@ -75,7 +75,7 @@ class LHC::Error < StandardError
|
|
75
75
|
debug << "Options: #{request.scrubbed_options}"
|
76
76
|
debug << "Headers: #{request.scrubbed_headers}"
|
77
77
|
debug << "Response Code: #{response.code} (#{response.options[:return_code]})"
|
78
|
-
debug << "Response Options: #{response.
|
78
|
+
debug << "Response Options: #{response.options}"
|
79
79
|
debug << response.body
|
80
80
|
debug << _message
|
81
81
|
debug.map { |str| self.class.fix_invalid_encoding(str) }.join("\n")
|
@@ -39,7 +39,7 @@ class LHC::Auth < LHC::Interceptor
|
|
39
39
|
set_bearer_authorization_header(token)
|
40
40
|
end
|
41
41
|
|
42
|
-
# rubocop:disable
|
42
|
+
# rubocop:disable Style/AccessorMethodName
|
43
43
|
def set_authorization_header(value)
|
44
44
|
request.headers['Authorization'] = value
|
45
45
|
end
|
@@ -50,18 +50,20 @@ class LHC::Auth < LHC::Interceptor
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def set_bearer_authorization_header(token)
|
53
|
-
|
54
|
-
auth_options.merge!(bearer_token: token)
|
55
|
-
request.options[:auth] = auth_options unless request.options.key?(:auth)
|
56
|
-
|
53
|
+
request.options[:auth].merge!(bearer_token: token)
|
57
54
|
set_authorization_header("Bearer #{token}")
|
58
55
|
end
|
59
|
-
# rubocop:enable
|
56
|
+
# rubocop:enable Style/AccessorMethodName
|
60
57
|
|
61
58
|
def reauthenticate!
|
62
|
-
# refresh
|
63
|
-
|
64
|
-
|
59
|
+
# refresh access_token
|
60
|
+
refresh_client_token_option.call
|
61
|
+
|
62
|
+
# Now as the token is refreshe
|
63
|
+
# we need to use the refreshed bearer token
|
64
|
+
# in the authorization header
|
65
|
+
bearer_authentication! if auth_options[:bearer]
|
66
|
+
|
65
67
|
# trigger LHC::Retry and ensure we do not trigger reauthenticate!
|
66
68
|
# again should it fail another time
|
67
69
|
new_options = request.options.dup
|
@@ -7,8 +7,8 @@ class LHC::Rollbar < LHC::Interceptor
|
|
7
7
|
include LHC::FixInvalidEncodingConcern
|
8
8
|
|
9
9
|
def after_response
|
10
|
-
return unless Object.const_defined?(
|
11
|
-
return
|
10
|
+
return unless Object.const_defined?('Rollbar')
|
11
|
+
return if response.success?
|
12
12
|
|
13
13
|
request = response.request
|
14
14
|
additional_params = request.options.fetch(:rollbar, {})
|
@@ -29,18 +29,9 @@ class LHC::Rollbar < LHC::Interceptor
|
|
29
29
|
}.merge additional_params
|
30
30
|
begin
|
31
31
|
Rollbar.warning("Status: #{response.code} URL: #{request.url}", data)
|
32
|
-
rescue
|
32
|
+
rescue Encoding::UndefinedConversionError
|
33
33
|
sanitized_data = data.deep_transform_values { |value| self.class.fix_invalid_encoding(value) }
|
34
34
|
Rollbar.warning("Status: #{response.code} URL: #{request.url}", sanitized_data)
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def report?
|
41
|
-
return false if response.success?
|
42
|
-
return false if response.request.error_ignored?
|
43
|
-
|
44
|
-
true
|
45
|
-
end
|
46
37
|
end
|
data/lib/lhc/request.rb
CHANGED
@@ -72,7 +72,6 @@ class LHC::Request
|
|
72
72
|
|
73
73
|
def scrubbed_options
|
74
74
|
scrubbed_options = options.deep_dup
|
75
|
-
scrubbed_options[:cache] = LHC::CacheScrubber.new(scrubbed_options[:cache]).scrubbed
|
76
75
|
scrubbed_options[:params] = LHC::ParamsScrubber.new(scrubbed_options[:params]).scrubbed
|
77
76
|
scrubbed_options[:headers] = LHC::HeadersScrubber.new(scrubbed_options[:headers], scrubbed_options[:auth]).scrubbed
|
78
77
|
scrubbed_options[:auth] = LHC::AuthScrubber.new(scrubbed_options[:auth]).scrubbed
|
data/lib/lhc/response.rb
CHANGED
@@ -54,12 +54,6 @@ class LHC::Response
|
|
54
54
|
request.format
|
55
55
|
end
|
56
56
|
|
57
|
-
def scrubbed_options
|
58
|
-
scrubbed_options = options.deep_dup
|
59
|
-
scrubbed_options[:effective_url] = LHC::EffectiveUrlScrubber.new(scrubbed_options[:effective_url]).scrubbed
|
60
|
-
scrubbed_options
|
61
|
-
end
|
62
|
-
|
63
57
|
private
|
64
58
|
|
65
59
|
attr_accessor :raw
|
@@ -44,7 +44,6 @@ class LHC::HeadersScrubber < LHC::Scrubber
|
|
44
44
|
|
45
45
|
def scrub_bearer_authentication_headers?
|
46
46
|
auth_options[:bearer].present? &&
|
47
|
-
auth_options[:bearer_token] &&
|
48
47
|
scrubbed['Authorization'].present? &&
|
49
48
|
scrubbed['Authorization'].include?(auth_options[:bearer_token])
|
50
49
|
end
|
data/lib/lhc/version.rb
CHANGED
data/lib/lhc.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'local_uri'
|
4
3
|
require 'typhoeus'
|
5
4
|
require 'active_support/core_ext/object/blank'
|
6
5
|
require 'active_support/core_ext/hash/keys'
|
@@ -120,10 +119,6 @@ module LHC
|
|
120
119
|
'lhc/scrubbers/auth_scrubber'
|
121
120
|
autoload :BodyScrubber,
|
122
121
|
'lhc/scrubbers/body_scrubber'
|
123
|
-
autoload :CacheScrubber,
|
124
|
-
'lhc/scrubbers/cache_scrubber'
|
125
|
-
autoload :EffectiveUrlScrubber,
|
126
|
-
'lhc/scrubbers/effective_url_scrubber'
|
127
122
|
autoload :HeadersScrubber,
|
128
123
|
'lhc/scrubbers/headers_scrubber'
|
129
124
|
autoload :ParamsScrubber,
|
data/spec/error/to_s_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe LHC::Error do
|
|
15
15
|
expect { "#{valid} #{invalid}" }.to raise_error Encoding::CompatibilityError
|
16
16
|
end
|
17
17
|
it 'to_json on an array raises an error' do
|
18
|
-
expect { [valid, invalid].to_json }.to raise_error
|
18
|
+
expect { [valid, invalid].to_json }.to raise_error Encoding::UndefinedConversionError
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'to_s on a hash does not raise an error' do
|
@@ -23,7 +23,7 @@ describe LHC::Error do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'to_json on a hash does raise an error' do
|
26
|
-
expect { { valid: valid, invalid: invalid }.to_json }.to raise_error
|
26
|
+
expect { { valid: valid, invalid: invalid }.to_json }.to raise_error Encoding::UndefinedConversionError
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -55,12 +55,10 @@ describe LHC::Error do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
let(:response) do
|
58
|
-
options = { return_code: :internal_error, response_headers: "" }
|
59
58
|
double('LHC::Response',
|
60
59
|
request: request,
|
61
60
|
code: 500,
|
62
|
-
options:
|
63
|
-
scrubbed_options: options,
|
61
|
+
options: { return_code: :internal_error, response_headers: "" },
|
64
62
|
body: '{"status":500,"message":"undefined"}')
|
65
63
|
end
|
66
64
|
|
@@ -5,7 +5,10 @@ require 'rails_helper'
|
|
5
5
|
describe LHC::Auth do
|
6
6
|
let(:initial_token) { '123456' }
|
7
7
|
let(:refresh_token) { 'abcdef' }
|
8
|
-
|
8
|
+
|
9
|
+
let(:options) do
|
10
|
+
{ bearer: -> { DummyAuthentication.access_token }, refresh_client_token: -> { DummyAuthentication.refresh_token } }
|
11
|
+
end
|
9
12
|
let!(:auth_failing) do
|
10
13
|
stub_request(:get, 'http://local.ch')
|
11
14
|
.with(headers: { 'Authorization' => "Bearer #{initial_token}" })
|
@@ -17,6 +20,23 @@ describe LHC::Auth do
|
|
17
20
|
end
|
18
21
|
|
19
22
|
before(:each) do
|
23
|
+
class DummyAuthentication
|
24
|
+
|
25
|
+
def self.refresh_token
|
26
|
+
# updates access_token
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.access_token
|
30
|
+
# this is used as bearer token
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# It does not matter what value this method returns it is not use by LHC.
|
35
|
+
# That method needs just to make sure that the value of the access_token
|
36
|
+
# is the new valid token
|
37
|
+
allow(DummyAuthentication).to receive(:refresh_token).and_return(nil)
|
38
|
+
|
39
|
+
allow(DummyAuthentication).to receive(:access_token).and_return(initial_token, refresh_token)
|
20
40
|
LHC.config.interceptors = [LHC::Auth, LHC::Retry]
|
21
41
|
end
|
22
42
|
|
@@ -27,27 +47,6 @@ describe LHC::Auth do
|
|
27
47
|
expect(auth_suceeding_after_recovery).to have_been_made.once
|
28
48
|
end
|
29
49
|
|
30
|
-
context 'without `auth` options' do
|
31
|
-
let(:headers) do
|
32
|
-
{ 'Authorization' => "Bearer #{initial_token}" }
|
33
|
-
end
|
34
|
-
|
35
|
-
before do
|
36
|
-
LHC::Auth.refresh_client_token = -> { refresh_token }
|
37
|
-
end
|
38
|
-
|
39
|
-
after do
|
40
|
-
LHC::Auth.refresh_client_token = -> { nil }
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'recovery is attempted' do
|
44
|
-
LHC.config.endpoint(:local, 'http://local.ch')
|
45
|
-
# the retried request (with updated Bearer), that should work
|
46
|
-
LHC.get(:local, { headers: headers })
|
47
|
-
expect(auth_suceeding_after_recovery).to have_been_made.once
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
50
|
it "recovery is not attempted again when the request has reauthenticated: true " do
|
52
51
|
LHC.config.endpoint(:local, 'http://local.ch', auth: options.merge(reauthenticated: true))
|
53
52
|
expect { LHC.get(:local) }.to raise_error(LHC::Unauthorized)
|
@@ -9,7 +9,7 @@ describe LHC::Rollbar do
|
|
9
9
|
|
10
10
|
context 'Rollbar is undefined' do
|
11
11
|
before(:each) do
|
12
|
-
Object.send(:remove_const, 'Rollbar') if Object.const_defined?(
|
12
|
+
Object.send(:remove_const, 'Rollbar') if Object.const_defined?('Rollbar')
|
13
13
|
end
|
14
14
|
it 'does not report' do
|
15
15
|
stub_request(:get, 'http://local.ch').to_return(status: 400)
|
@@ -65,24 +65,5 @@ describe LHC::Rollbar do
|
|
65
65
|
request: hash_including(url: anything, method: anything, headers: hash_including(private_key: LHC::Scrubber::SCRUB_DISPLAY), params: { api_key: LHC::Scrubber::SCRUB_DISPLAY })
|
66
66
|
)
|
67
67
|
end
|
68
|
-
|
69
|
-
context 'ignored errors' do
|
70
|
-
it 'does not report to rollbar if the error is ignored' do
|
71
|
-
stub_request(:get, 'http://local.ch').to_return(status: 404)
|
72
|
-
LHC.get('http://local.ch', ignore: [LHC::NotFound])
|
73
|
-
expect(::Rollbar).not_to have_received(:warning)
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'does report to rollbar' do
|
77
|
-
stub_request(:get, 'http://local.ch').to_return(status: 400)
|
78
|
-
expect(-> { LHC.get('http://local.ch', ignore: [LHC::NotFound]) }).to raise_error LHC::BadRequest
|
79
|
-
expect(::Rollbar).not_to have_received(:warning)
|
80
|
-
.with(
|
81
|
-
'Status: 400 URL: http://local.ch',
|
82
|
-
response: hash_including(body: anything, code: anything, headers: anything, time: anything, timeout?: anything),
|
83
|
-
request: hash_including(url: anything, method: anything, headers: hash_including(private_key: LHC::Scrubber::SCRUB_DISPLAY), params: { api_key: LHC::Scrubber::SCRUB_DISPLAY })
|
84
|
-
)
|
85
|
-
end
|
86
|
-
end
|
87
68
|
end
|
88
69
|
end
|
@@ -74,14 +74,6 @@ describe LHC::Request do
|
|
74
74
|
LHC.config.scrubs = {}
|
75
75
|
expect(request.scrubbed_headers).to include(authorization_header)
|
76
76
|
end
|
77
|
-
|
78
|
-
context 'when the bearer_token is nil' do
|
79
|
-
let(:bearer_token) { nil }
|
80
|
-
|
81
|
-
it 'scrubs nothing' do
|
82
|
-
expect(request.scrubbed_headers).to include(authorization_header)
|
83
|
-
end
|
84
|
-
end
|
85
77
|
end
|
86
78
|
|
87
79
|
context 'basic authentication' do
|
@@ -18,12 +18,9 @@ describe LHC::Request do
|
|
18
18
|
let(:params) { { api_key: 'api-key-params' } }
|
19
19
|
let(:headers) { { private_key: 'private-key-header' } }
|
20
20
|
let(:body) { { user_token: 'user-token-body' } }
|
21
|
-
let(:cache) do
|
22
|
-
{ key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?#{params}" }
|
23
|
-
end
|
24
21
|
|
25
22
|
let(:request) do
|
26
|
-
response = LHC.post(:local, params: params, headers: headers, body: body
|
23
|
+
response = LHC.post(:local, params: params, headers: headers, body: body)
|
27
24
|
response.request
|
28
25
|
end
|
29
26
|
|
@@ -33,8 +30,6 @@ describe LHC::Request do
|
|
33
30
|
expect(request.scrubbed_options[:body]).to include(user_token: LHC::Scrubber::SCRUB_DISPLAY)
|
34
31
|
expect(request.scrubbed_options[:auth][:bearer_token]).to eq(LHC::Scrubber::SCRUB_DISPLAY)
|
35
32
|
expect(request.scrubbed_options[:auth][:basic]).to be nil
|
36
|
-
expect(request.scrubbed_options[:cache])
|
37
|
-
.to include(key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?{:api_key=>\"[FILTERED]\"}")
|
38
33
|
end
|
39
34
|
|
40
35
|
context 'when bearer auth is not a proc' do
|
@@ -58,19 +53,6 @@ describe LHC::Request do
|
|
58
53
|
end
|
59
54
|
end
|
60
55
|
|
61
|
-
context 'when parameter should not get scrubbed' do
|
62
|
-
let(:params) { { any_parameter: 'any-parameter' } }
|
63
|
-
|
64
|
-
let(:cache) do
|
65
|
-
{ key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?#{params}" }
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'does not scrubb the parameter' do
|
69
|
-
expect(request.scrubbed_options[:cache])
|
70
|
-
.to include(key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?#{params}")
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
56
|
context 'when body data is nested' do
|
75
57
|
let(:body) do
|
76
58
|
{
|
@@ -122,8 +104,6 @@ describe LHC::Request do
|
|
122
104
|
expect(request.scrubbed_options[:headers]).not_to include(private_key: LHC::Scrubber::SCRUB_DISPLAY)
|
123
105
|
expect(request.scrubbed_options[:body]).not_to include(user_token: LHC::Scrubber::SCRUB_DISPLAY)
|
124
106
|
expect(request.scrubbed_options[:auth][:bearer_token]).not_to eq(LHC::Scrubber::SCRUB_DISPLAY)
|
125
|
-
expect(request.scrubbed_options[:cache])
|
126
|
-
.not_to include(key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?{:api_key=>\"[FILTERED]\"}")
|
127
107
|
end
|
128
108
|
end
|
129
109
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 16.0.0.pre.pro2162
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- https://github.com/local-ch/lhc/contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: local_uri
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: typhoeus
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,20 +178,6 @@ dependencies:
|
|
192
178
|
- - "~>"
|
193
179
|
- !ruby/object:Gem::Version
|
194
180
|
version: 1.26.0
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: sprockets-rails
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
181
|
- !ruby/object:Gem::Dependency
|
210
182
|
name: timecop
|
211
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -301,8 +273,6 @@ files:
|
|
301
273
|
- lib/lhc/scrubber.rb
|
302
274
|
- lib/lhc/scrubbers/auth_scrubber.rb
|
303
275
|
- lib/lhc/scrubbers/body_scrubber.rb
|
304
|
-
- lib/lhc/scrubbers/cache_scrubber.rb
|
305
|
-
- lib/lhc/scrubbers/effective_url_scrubber.rb
|
306
276
|
- lib/lhc/scrubbers/headers_scrubber.rb
|
307
277
|
- lib/lhc/scrubbers/params_scrubber.rb
|
308
278
|
- lib/lhc/test/cache_helper.rb
|
@@ -431,7 +401,6 @@ files:
|
|
431
401
|
- spec/response/effective_url_spec.rb
|
432
402
|
- spec/response/headers_spec.rb
|
433
403
|
- spec/response/options_spec.rb
|
434
|
-
- spec/response/scrubbed_options_spec.rb
|
435
404
|
- spec/response/success_spec.rb
|
436
405
|
- spec/response/time_spec.rb
|
437
406
|
- spec/spec_helper.rb
|
@@ -458,13 +427,147 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
458
427
|
version: '2.7'
|
459
428
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
460
429
|
requirements:
|
461
|
-
- - "
|
430
|
+
- - ">"
|
462
431
|
- !ruby/object:Gem::Version
|
463
|
-
version:
|
432
|
+
version: 1.3.1
|
464
433
|
requirements:
|
465
434
|
- Ruby >= 2.0.0
|
466
435
|
rubygems_version: 3.1.4
|
467
436
|
signing_key:
|
468
437
|
specification_version: 4
|
469
438
|
summary: Advanced HTTP Client for Ruby, fueled with interceptors
|
470
|
-
test_files:
|
439
|
+
test_files:
|
440
|
+
- spec/basic_methods/delete_spec.rb
|
441
|
+
- spec/basic_methods/get_spec.rb
|
442
|
+
- spec/basic_methods/post_spec.rb
|
443
|
+
- spec/basic_methods/put_spec.rb
|
444
|
+
- spec/basic_methods/request_spec.rb
|
445
|
+
- spec/basic_methods/request_without_rails_spec.rb
|
446
|
+
- spec/config/endpoints_spec.rb
|
447
|
+
- spec/config/placeholders_spec.rb
|
448
|
+
- spec/config/scrubs_spec.rb
|
449
|
+
- spec/core_ext/hash/deep_transform_values_spec.rb
|
450
|
+
- spec/dummy/README.rdoc
|
451
|
+
- spec/dummy/Rakefile
|
452
|
+
- spec/dummy/app/assets/config/manifest.js
|
453
|
+
- spec/dummy/app/assets/images/.keep
|
454
|
+
- spec/dummy/app/assets/javascripts/application.js
|
455
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
456
|
+
- spec/dummy/app/controllers/application_controller.rb
|
457
|
+
- spec/dummy/app/controllers/concerns/.keep
|
458
|
+
- spec/dummy/app/helpers/application_helper.rb
|
459
|
+
- spec/dummy/app/mailers/.keep
|
460
|
+
- spec/dummy/app/models/.keep
|
461
|
+
- spec/dummy/app/models/concerns/.keep
|
462
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
463
|
+
- spec/dummy/bin/bundle
|
464
|
+
- spec/dummy/bin/rails
|
465
|
+
- spec/dummy/bin/rake
|
466
|
+
- spec/dummy/config.ru
|
467
|
+
- spec/dummy/config/application.rb
|
468
|
+
- spec/dummy/config/boot.rb
|
469
|
+
- spec/dummy/config/environment.rb
|
470
|
+
- spec/dummy/config/environments/development.rb
|
471
|
+
- spec/dummy/config/environments/production.rb
|
472
|
+
- spec/dummy/config/environments/test.rb
|
473
|
+
- spec/dummy/config/initializers/assets.rb
|
474
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
475
|
+
- spec/dummy/config/initializers/cookies_serializer.rb
|
476
|
+
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
477
|
+
- spec/dummy/config/initializers/inflections.rb
|
478
|
+
- spec/dummy/config/initializers/mime_types.rb
|
479
|
+
- spec/dummy/config/initializers/session_store.rb
|
480
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
481
|
+
- spec/dummy/config/locales/en.yml
|
482
|
+
- spec/dummy/config/routes.rb
|
483
|
+
- spec/dummy/config/secrets.yml
|
484
|
+
- spec/dummy/lib/assets/.keep
|
485
|
+
- spec/dummy/log/.keep
|
486
|
+
- spec/dummy/public/404.html
|
487
|
+
- spec/dummy/public/422.html
|
488
|
+
- spec/dummy/public/500.html
|
489
|
+
- spec/dummy/public/favicon.ico
|
490
|
+
- spec/dummy/tmp/cache/.gitkeep
|
491
|
+
- spec/endpoint/compile_spec.rb
|
492
|
+
- spec/endpoint/match_spec.rb
|
493
|
+
- spec/endpoint/placeholders_spec.rb
|
494
|
+
- spec/endpoint/remove_interpolated_params_spec.rb
|
495
|
+
- spec/endpoint/values_as_params_spec.rb
|
496
|
+
- spec/error/dup_spec.rb
|
497
|
+
- spec/error/find_spec.rb
|
498
|
+
- spec/error/response_spec.rb
|
499
|
+
- spec/error/timeout_spec.rb
|
500
|
+
- spec/error/to_s_spec.rb
|
501
|
+
- spec/formats/form_spec.rb
|
502
|
+
- spec/formats/json_spec.rb
|
503
|
+
- spec/formats/multipart_spec.rb
|
504
|
+
- spec/formats/plain_spec.rb
|
505
|
+
- spec/interceptors/after_request_spec.rb
|
506
|
+
- spec/interceptors/after_response_spec.rb
|
507
|
+
- spec/interceptors/auth/basic_auth_spec.rb
|
508
|
+
- spec/interceptors/auth/bearer_spec.rb
|
509
|
+
- spec/interceptors/auth/body_spec.rb
|
510
|
+
- spec/interceptors/auth/long_basic_auth_credentials_spec.rb
|
511
|
+
- spec/interceptors/auth/no_instance_var_for_options_spec.rb
|
512
|
+
- spec/interceptors/auth/reauthentication_configuration_spec.rb
|
513
|
+
- spec/interceptors/auth/reauthentication_spec.rb
|
514
|
+
- spec/interceptors/before_request_spec.rb
|
515
|
+
- spec/interceptors/before_response_spec.rb
|
516
|
+
- spec/interceptors/caching/hydra_spec.rb
|
517
|
+
- spec/interceptors/caching/main_spec.rb
|
518
|
+
- spec/interceptors/caching/methods_spec.rb
|
519
|
+
- spec/interceptors/caching/multilevel_cache_spec.rb
|
520
|
+
- spec/interceptors/caching/options_spec.rb
|
521
|
+
- spec/interceptors/caching/parameters_spec.rb
|
522
|
+
- spec/interceptors/caching/response_status_spec.rb
|
523
|
+
- spec/interceptors/caching/to_cache_spec.rb
|
524
|
+
- spec/interceptors/default_interceptors_spec.rb
|
525
|
+
- spec/interceptors/default_timeout/main_spec.rb
|
526
|
+
- spec/interceptors/define_spec.rb
|
527
|
+
- spec/interceptors/dup_spec.rb
|
528
|
+
- spec/interceptors/logging/main_spec.rb
|
529
|
+
- spec/interceptors/monitoring/caching_spec.rb
|
530
|
+
- spec/interceptors/monitoring/main_spec.rb
|
531
|
+
- spec/interceptors/prometheus_spec.rb
|
532
|
+
- spec/interceptors/response_competition_spec.rb
|
533
|
+
- spec/interceptors/retry/main_spec.rb
|
534
|
+
- spec/interceptors/return_response_spec.rb
|
535
|
+
- spec/interceptors/rollbar/invalid_encoding_spec.rb
|
536
|
+
- spec/interceptors/rollbar/main_spec.rb
|
537
|
+
- spec/interceptors/throttle/main_spec.rb
|
538
|
+
- spec/interceptors/throttle/reset_track_spec.rb
|
539
|
+
- spec/interceptors/zipkin/distributed_tracing_spec.rb
|
540
|
+
- spec/rails_helper.rb
|
541
|
+
- spec/request/body_spec.rb
|
542
|
+
- spec/request/encoding_spec.rb
|
543
|
+
- spec/request/error_handling_spec.rb
|
544
|
+
- spec/request/headers_spec.rb
|
545
|
+
- spec/request/ignore_errors_spec.rb
|
546
|
+
- spec/request/option_dup_spec.rb
|
547
|
+
- spec/request/parallel_requests_spec.rb
|
548
|
+
- spec/request/params_encoding_spec.rb
|
549
|
+
- spec/request/request_without_rails_spec.rb
|
550
|
+
- spec/request/scrubbed_headers_spec.rb
|
551
|
+
- spec/request/scrubbed_options_spec.rb
|
552
|
+
- spec/request/scrubbed_params_spec.rb
|
553
|
+
- spec/request/url_patterns_spec.rb
|
554
|
+
- spec/request/user_agent_spec.rb
|
555
|
+
- spec/request/user_agent_without_rails_spec.rb
|
556
|
+
- spec/response/body_spec.rb
|
557
|
+
- spec/response/code_spec.rb
|
558
|
+
- spec/response/data_accessor_spec.rb
|
559
|
+
- spec/response/data_spec.rb
|
560
|
+
- spec/response/effective_url_spec.rb
|
561
|
+
- spec/response/headers_spec.rb
|
562
|
+
- spec/response/options_spec.rb
|
563
|
+
- spec/response/success_spec.rb
|
564
|
+
- spec/response/time_spec.rb
|
565
|
+
- spec/spec_helper.rb
|
566
|
+
- spec/support/fixtures/json/feedback.json
|
567
|
+
- spec/support/fixtures/json/feedbacks.json
|
568
|
+
- spec/support/fixtures/json/localina_content_ad.json
|
569
|
+
- spec/support/load_json.rb
|
570
|
+
- spec/support/reset_config.rb
|
571
|
+
- spec/support/zipkin_mock.rb
|
572
|
+
- spec/timeouts/no_signal_spec.rb
|
573
|
+
- spec/timeouts/timings_spec.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class LHC::CacheScrubber < LHC::Scrubber
|
4
|
-
def initialize(data)
|
5
|
-
super(data)
|
6
|
-
scrub_cache_options!
|
7
|
-
end
|
8
|
-
|
9
|
-
private
|
10
|
-
|
11
|
-
def scrub_cache_options!
|
12
|
-
return if scrubbed.blank?
|
13
|
-
return if scrub_elements.blank?
|
14
|
-
|
15
|
-
scrub_cache_key!
|
16
|
-
end
|
17
|
-
|
18
|
-
def scrub_cache_key!
|
19
|
-
return if scrubbed[:key].blank?
|
20
|
-
|
21
|
-
scrub_elements.each do |scrub_element|
|
22
|
-
matches = scrubbed[:key].match(/:#{scrub_element}=>"(.*?)"/)
|
23
|
-
next if matches.nil?
|
24
|
-
|
25
|
-
value = matches[-1]
|
26
|
-
scrubbed[:key].gsub!(value, SCRUB_DISPLAY)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def scrub_elements
|
31
|
-
# The cache key includes the whole request url inklusive params.
|
32
|
-
# We need to scrub those params from the cache key.
|
33
|
-
LHC.config.scrubs[:params]
|
34
|
-
end
|
35
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class LHC::EffectiveUrlScrubber < LHC::Scrubber
|
4
|
-
def initialize(data)
|
5
|
-
super(data)
|
6
|
-
scrub_effective_url_options!
|
7
|
-
end
|
8
|
-
|
9
|
-
private
|
10
|
-
|
11
|
-
def scrub_effective_url_options!
|
12
|
-
return if scrubbed.blank?
|
13
|
-
return if scrub_elements.blank?
|
14
|
-
|
15
|
-
scrub_effective_url!
|
16
|
-
end
|
17
|
-
|
18
|
-
def scrub_effective_url!
|
19
|
-
return if scrubbed.blank?
|
20
|
-
|
21
|
-
scrub_elements.each do |scrub_element|
|
22
|
-
uri = LocalUri::URI.new(scrubbed)
|
23
|
-
self.scrubbed = CGI.unescape(uri.query.merge(scrub_element => SCRUB_DISPLAY).to_s)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def scrub_elements
|
28
|
-
# The effective url includes the params of the request
|
29
|
-
# so we need to scrub those params from the effective url.
|
30
|
-
LHC.config.scrubs[:params]
|
31
|
-
end
|
32
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
describe LHC::Response do
|
6
|
-
let(:options) do
|
7
|
-
{ effective_url: 'http://local.ch?api_key=api-key' }
|
8
|
-
end
|
9
|
-
|
10
|
-
let(:raw_response) { OpenStruct.new(options: options) }
|
11
|
-
|
12
|
-
before do
|
13
|
-
LHC.config.scrubs[:params] << 'api_key'
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'scrubbes effective url' do
|
17
|
-
response = LHC::Response.new(raw_response, nil)
|
18
|
-
expect(response.scrubbed_options[:effective_url]).to eq "http://local.ch?api_key=#{LHC::Scrubber::SCRUB_DISPLAY}"
|
19
|
-
end
|
20
|
-
end
|