tshield 0.14.0.0 → 0.15.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -2
- data/config/tshield.yml +6 -6
- data/lib/tshield/configuration.rb +8 -3
- data/lib/tshield/controllers/requests.rb +21 -11
- data/lib/tshield/errors.rb +4 -0
- data/lib/tshield/version.rb +1 -1
- data/spec/tshield/configuration_spec.rb +1 -1
- data/spec/tshield/controllers/requests_spec.rb +1 -0
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3675ad22a08350950eadbc2000d89be8dbcf44acc9a4487d1b8c3a59bae3dcd1
|
4
|
+
data.tar.gz: c15c0f0d52cf43de37744efcc418932c83db271ba38a50b4ce72df7cd708e65b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b9b08892d5f9843a5cc2fd2db34a0d160126104a83a83ad1d9f4b041b83d9acd5d773ea8645539f16dbf046d85fb54ee2a0a92b963f87f954b88a3ca9656f39
|
7
|
+
data.tar.gz: 6300ebfca1c90b7e11a19d2facc3e5cc855db320ffe352b49326a6e20d9f73f401d3e6c4a1f6f3f2c6ba5a01a7c8a2426c1108ce20a2009d6be05c8c484ae9be
|
data/README.md
CHANGED
@@ -3,8 +3,6 @@ TShield
|
|
3
3
|
|
4
4
|
[![Build Status](https://travis-ci.org/diegorubin/tshield.svg)](https://travis-ci.org/diegorubin/tshield)
|
5
5
|
[![Coverage Status](https://coveralls.io/repos/github/diegorubin/tshield/badge.svg?branch=master)](https://coveralls.io/github/diegorubin/tshield?branch=master)
|
6
|
-
[![SourceLevel](https://app.sourcelevel.io/github/diegorubin/-/tshield.svg)](https://app.sourcelevel.io/github/diegorubin/-/tshield)
|
7
|
-
[![Join the chat at https://gitter.im/diegorubin/tshield](https://badges.gitter.im/diegorubin/tshield.svg)](https://gitter.im/diegorubin/tshield?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
8
6
|
[![Gem Version](https://badge.fury.io/rb/tshield.svg)](https://badge.fury.io/rb/tshield)
|
9
7
|
![TShield Publish](https://github.com/diegorubin/tshield/workflows/TShield%20Publish/badge.svg)
|
10
8
|
|
data/config/tshield.yml
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
---
|
2
2
|
grpc:
|
3
3
|
port: 5678
|
4
|
-
proto_dir:
|
4
|
+
proto_dir: "proto"
|
5
5
|
services:
|
6
|
-
|
7
|
-
module:
|
8
|
-
hostname:
|
6
|
+
"helloworld_services_pb":
|
7
|
+
module: "Helloworld::Greeter"
|
8
|
+
hostname: "0.0.0.0:50051"
|
9
9
|
request:
|
10
10
|
timeout: 10
|
11
11
|
domains:
|
12
|
-
|
13
|
-
name:
|
12
|
+
"http://localhost:9090":
|
13
|
+
name: "components"
|
14
14
|
skip_query_params:
|
15
15
|
- b
|
16
16
|
paths:
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'yaml'
|
4
4
|
|
5
|
+
require 'tshield/errors'
|
5
6
|
require 'tshield/after_filter'
|
6
7
|
require 'tshield/before_filter'
|
7
8
|
require 'tshield/options'
|
@@ -59,7 +60,7 @@ module TShield
|
|
59
60
|
result = self.class.get_url_for_domain_by_path(path, config)
|
60
61
|
return url if result
|
61
62
|
end
|
62
|
-
|
63
|
+
raise ConfigurationNotFoundError.new("Domain not found for path #{path}")
|
63
64
|
end
|
64
65
|
|
65
66
|
def windows_compatibility?
|
@@ -89,8 +90,12 @@ module TShield
|
|
89
90
|
end
|
90
91
|
|
91
92
|
def get_filters(domain)
|
92
|
-
|
93
|
-
|
93
|
+
begin
|
94
|
+
(domains[domain]['filters'] || [])
|
95
|
+
.collect { |filter| Class.const_get(filter) }
|
96
|
+
rescue
|
97
|
+
puts "Error loading filters for domain #{domain}"
|
98
|
+
end
|
94
99
|
end
|
95
100
|
|
96
101
|
def get_excluded_headers(domain)
|
@@ -57,8 +57,6 @@ module TShield
|
|
57
57
|
ip: request.ip
|
58
58
|
}
|
59
59
|
|
60
|
-
treat_headers_by_domain(options, path)
|
61
|
-
|
62
60
|
if %w[POST PUT PATCH].include? method
|
63
61
|
result = request.body.read.encode('UTF-8',
|
64
62
|
invalid: :replace,
|
@@ -67,13 +65,21 @@ module TShield
|
|
67
65
|
options[:body] = result
|
68
66
|
end
|
69
67
|
api_response = TShield::RequestMatching.new(path, options.clone).match_request
|
70
|
-
|
71
68
|
unless api_response
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
69
|
+
begin
|
70
|
+
treat_headers_by_domain(options, path)
|
71
|
+
add_headers(options, path)
|
72
|
+
|
73
|
+
api_response ||= TShield::RequestVCR.new(path, options.clone).vcr_response
|
74
|
+
api_response.headers.reject! do |key, _v|
|
75
|
+
configuration.get_excluded_headers(domain(path)).include?(key)
|
76
|
+
end
|
77
|
+
rescue ConfigurationNotFoundError => e
|
78
|
+
logger.error("Error on recover configuration for #{path}")
|
79
|
+
|
80
|
+
status 500
|
81
|
+
body({tshield: e }.to_json)
|
82
|
+
return
|
77
83
|
end
|
78
84
|
end
|
79
85
|
|
@@ -110,9 +116,13 @@ module TShield
|
|
110
116
|
end
|
111
117
|
|
112
118
|
def delay(path)
|
113
|
-
|
114
|
-
|
115
|
-
|
119
|
+
begin
|
120
|
+
delay_in_seconds = configuration.get_delay(domain(path), path) || 0
|
121
|
+
logger.info("Response with delay of #{delay_in_seconds} seconds")
|
122
|
+
sleep delay_in_seconds
|
123
|
+
rescue ConfigurationNotFoundError
|
124
|
+
logger.debug('No delay configured')
|
125
|
+
end
|
116
126
|
end
|
117
127
|
end
|
118
128
|
end
|
data/lib/tshield/errors.rb
CHANGED
data/lib/tshield/version.rb
CHANGED
@@ -61,7 +61,7 @@ describe TShield::Configuration do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'return nil if domain not found' do
|
64
|
-
expect
|
64
|
+
expect{@configuration.get_domain_for('/api/four')}.to raise_error(ConfigurationNotFoundError)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -47,6 +47,7 @@ describe TShield::Controllers::Requests do
|
|
47
47
|
allow(matched_response).to receive(:headers).and_return({})
|
48
48
|
allow(matched_response).to receive(:body).and_return('')
|
49
49
|
allow(@mock_logger).to receive(:info)
|
50
|
+
allow(@mock_logger).to receive(:debug)
|
50
51
|
|
51
52
|
expect(TShield::Controllers::Helpers::SessionHelpers)
|
52
53
|
.to receive(:current_session_call).with(request, '/?a=b', 'GET')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tshield
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Rubin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-10-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: grpc
|
@@ -469,18 +469,18 @@ specification_version: 4
|
|
469
469
|
summary: Proxy for mocks API responses
|
470
470
|
test_files:
|
471
471
|
- spec/spec_helper.rb
|
472
|
+
- spec/tshield/configuration_spec.rb
|
472
473
|
- spec/tshield/request_matching_spec.rb
|
473
474
|
- spec/tshield/sessions_spec.rb
|
475
|
+
- spec/tshield/controllers/requests_spec.rb
|
474
476
|
- spec/tshield/request_vcr_spec.rb
|
475
|
-
- spec/tshield/after_filter_spec.rb
|
476
477
|
- spec/tshield/grpc_spec.rb
|
477
478
|
- spec/tshield/options_spec.rb
|
479
|
+
- spec/tshield/after_filter_spec.rb
|
478
480
|
- spec/tshield/fixtures/config/tshield-without-grpc.yml
|
481
|
+
- spec/tshield/fixtures/config/tshield.yml
|
479
482
|
- spec/tshield/fixtures/config/tshield-with-send-content-type-header_as_false.yml
|
480
483
|
- spec/tshield/fixtures/config/tshield-with-send-content-type-header.yml
|
481
|
-
- spec/tshield/fixtures/config/tshield.yml
|
482
|
-
- spec/tshield/fixtures/proto/test_services_pb.rb
|
483
484
|
- spec/tshield/fixtures/matching/example.json
|
485
|
+
- spec/tshield/fixtures/proto/test_services_pb.rb
|
484
486
|
- spec/tshield/fixtures/filters/example_filter.rb
|
485
|
-
- spec/tshield/controllers/requests_spec.rb
|
486
|
-
- spec/tshield/configuration_spec.rb
|