lhc 15.2.0 → 16.0.0.pre.pro2162
Sign up to get free protection for your applications and to get access to all the features.
- 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/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_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
|
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
|
@@ -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
|