tshield 0.3.0.0 → 0.3.3.0
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/lib/tshield/configuration.rb +4 -0
- data/lib/tshield/controllers/requests.rb +27 -14
- data/lib/tshield/request.rb +27 -7
- data/lib/tshield/response.rb +3 -2
- data/lib/tshield/sessions.rb +8 -3
- data/lib/tshield/version.rb +1 -1
- data/spec/tshield/request_spec.rb +11 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16569c4650ae0fb6c0f181e599c1449a4b40bbdb
|
4
|
+
data.tar.gz: 0d98311928827e374b8316f22ab015904ec28153
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 927d205cf8404a59cb12f843cb87a7b6179c4f3d65652b6e5062260cf26e2e4c58b79808ea1065a151866cdbd59549c0fb41a425a9632937a066953ee30f3697
|
7
|
+
data.tar.gz: 1346a118634fe1fda37246a736d242945235a8deaa5b4942ed7a184be4f823fd1379752952bd1d10dfb0ebb74185172525e6f0c7f1e0eb240076860c90671daa
|
@@ -7,41 +7,41 @@ require 'byebug'
|
|
7
7
|
require 'tshield/options'
|
8
8
|
require 'tshield/configuration'
|
9
9
|
require 'tshield/request'
|
10
|
+
require 'tshield/sessions'
|
10
11
|
|
11
12
|
module TShield
|
12
13
|
module Controllers
|
13
14
|
module Requests
|
14
|
-
PATHP = /([a-zA-Z
|
15
|
+
PATHP = /([a-zA-Z\/\._-]+)/
|
15
16
|
|
16
17
|
def self.registered(app)
|
17
18
|
app.configure :production, :development do
|
18
19
|
app.enable :logging
|
19
20
|
end
|
20
|
-
|
21
21
|
|
22
22
|
app.get (PATHP) do
|
23
|
-
treat(params, request)
|
23
|
+
treat(params, request, response)
|
24
24
|
end
|
25
25
|
|
26
26
|
app.post (PATHP) do
|
27
|
-
treat(params, request)
|
27
|
+
treat(params, request, response)
|
28
28
|
end
|
29
29
|
|
30
30
|
app.put (PATHP) do
|
31
|
-
treat(params, request)
|
31
|
+
treat(params, request, response)
|
32
32
|
end
|
33
33
|
|
34
34
|
app.patch (PATHP) do
|
35
|
-
treat(params, request)
|
35
|
+
treat(params, request, response)
|
36
36
|
end
|
37
37
|
|
38
38
|
app.head (PATHP) do
|
39
|
-
treat(params, request)
|
39
|
+
treat(params, request, response)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
module Helpers
|
44
|
-
def treat(params, request)
|
44
|
+
def treat(params, request, response)
|
45
45
|
path = params.fetch('captures', [])[0]
|
46
46
|
|
47
47
|
debugger if TShield::Options.instance.break?(path: path, moment: :before)
|
@@ -73,25 +73,38 @@ module TShield
|
|
73
73
|
|
74
74
|
set_content_type content_type
|
75
75
|
|
76
|
-
|
76
|
+
api_response = TShield::Request.new(path, options).response
|
77
77
|
|
78
78
|
logger.info(
|
79
|
-
"original=#{
|
79
|
+
"original=#{api_response.original} method=#{method} path=#{path} content-type=#{request_content_type} session=#{current_session_name(request)}")
|
80
80
|
|
81
|
-
|
81
|
+
status api_response.status
|
82
|
+
headers api_response.headers.reject { |k,v| configuration.get_excluded_headers(domain(path)).include?(k) }
|
83
|
+
body api_response.body
|
82
84
|
end
|
83
85
|
|
84
86
|
def set_content_type(request_content_type)
|
85
87
|
content_type :json
|
86
88
|
end
|
87
89
|
|
90
|
+
def current_session_name(request)
|
91
|
+
session = TShield::Sessions.current(request.ip)
|
92
|
+
session ? session[:name] : 'no-session'
|
93
|
+
end
|
94
|
+
|
88
95
|
def add_headers(headers, path)
|
89
|
-
|
90
|
-
domain = @configuration.get_domain_for(path)
|
91
|
-
@configuration.get_headers(domain).each do |source, destiny|
|
96
|
+
configuration.get_headers(domain(path)).each do |source, destiny|
|
92
97
|
headers[destiny] = request.env[source] unless request.env[source].nil?
|
93
98
|
end
|
94
99
|
end
|
100
|
+
|
101
|
+
def configuration
|
102
|
+
@configuration ||= TShield::Configuration.singleton
|
103
|
+
end
|
104
|
+
|
105
|
+
def domain(path)
|
106
|
+
@domain ||= configuration.get_domain_for(path)
|
107
|
+
end
|
95
108
|
end
|
96
109
|
end
|
97
110
|
end
|
data/lib/tshield/request.rb
CHANGED
@@ -2,6 +2,8 @@ require 'httparty'
|
|
2
2
|
require 'json'
|
3
3
|
require 'byebug'
|
4
4
|
|
5
|
+
require 'digest/sha1'
|
6
|
+
|
5
7
|
require 'tshield/configuration'
|
6
8
|
require 'tshield/options'
|
7
9
|
require 'tshield/response'
|
@@ -32,8 +34,7 @@ module TShield
|
|
32
34
|
@response.original = false
|
33
35
|
else
|
34
36
|
raw = HTTParty.send("#{method}", @url, @options)
|
35
|
-
save(raw)
|
36
|
-
@response = TShield::Response.new(raw.body, raw.header)
|
37
|
+
@response = save(raw)
|
37
38
|
@response.original = true
|
38
39
|
end
|
39
40
|
current_session[:counter].add(@path, method) if current_session
|
@@ -51,9 +52,18 @@ module TShield
|
|
51
52
|
end
|
52
53
|
|
53
54
|
def save(raw_response)
|
54
|
-
|
55
|
+
headers = {}
|
56
|
+
raw_response.headers.each {|k,v| headers[k] = v}
|
57
|
+
|
58
|
+
content << {
|
59
|
+
body: raw_response.body,
|
60
|
+
status: raw_response.code,
|
61
|
+
headers: headers
|
62
|
+
}
|
63
|
+
|
55
64
|
write(content)
|
56
|
-
|
65
|
+
|
66
|
+
TShield::Response.new(raw_response.body, headers, raw_response.code)
|
57
67
|
end
|
58
68
|
|
59
69
|
def current_session
|
@@ -69,7 +79,7 @@ module TShield
|
|
69
79
|
end
|
70
80
|
|
71
81
|
def exists
|
72
|
-
file_exists
|
82
|
+
file_exists && include_current_response?
|
73
83
|
end
|
74
84
|
|
75
85
|
def include_current_response?
|
@@ -80,7 +90,7 @@ module TShield
|
|
80
90
|
|
81
91
|
def get_current_response
|
82
92
|
current = content[@content_idx || 0]
|
83
|
-
TShield::Response.new(current['body'], current['
|
93
|
+
TShield::Response.new(current['body'], current['headers'] || [], current['status'] || 200)
|
84
94
|
end
|
85
95
|
|
86
96
|
def key
|
@@ -101,7 +111,7 @@ module TShield
|
|
101
111
|
domain_path = File.join(request_path, domain.gsub(/.*:\/\//, ''))
|
102
112
|
Dir.mkdir(domain_path) unless File.exists?(domain_path)
|
103
113
|
|
104
|
-
path_path = File.join(domain_path, @path
|
114
|
+
path_path = File.join(domain_path, safe_dir(@path))
|
105
115
|
Dir.mkdir(path_path) unless File.exists?(path_path)
|
106
116
|
|
107
117
|
method_path = File.join(path_path, method)
|
@@ -116,6 +126,16 @@ module TShield
|
|
116
126
|
f.close
|
117
127
|
end
|
118
128
|
|
129
|
+
def safe_dir(url)
|
130
|
+
if url.size > 225
|
131
|
+
path = url.gsub(/(\?.*)/, '')
|
132
|
+
params = Digest::SHA1.hexdigest $1
|
133
|
+
"#{path.gsub(/\//, '-').gsub(/^-/, '')}?#{params}"
|
134
|
+
else
|
135
|
+
url.gsub(/\//, '-').gsub(/^-/, '')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
119
139
|
end
|
120
140
|
|
121
141
|
end
|
data/lib/tshield/response.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module TShield
|
2
2
|
class Response
|
3
|
-
attr_accessor :body, :headers, :original
|
3
|
+
attr_accessor :body, :headers, :status, :original
|
4
4
|
|
5
|
-
def initialize(body, headers)
|
5
|
+
def initialize(body, headers, status)
|
6
6
|
@body = body
|
7
7
|
@headers = headers
|
8
|
+
@status = status
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
data/lib/tshield/sessions.rb
CHANGED
@@ -4,21 +4,26 @@ require 'tshield/counter'
|
|
4
4
|
module TShield
|
5
5
|
module Sessions
|
6
6
|
def self.start(ip, name)
|
7
|
-
sessions[ip] = {name: name, counter: TShield::Counter.new}
|
7
|
+
sessions[normalize_ip(ip)] = {name: name, counter: TShield::Counter.new}
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.stop(ip)
|
11
|
-
sessions[ip] = nil
|
11
|
+
sessions[normalize_ip(ip)] = nil
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.current(ip)
|
15
|
-
sessions[ip]
|
15
|
+
sessions[normalize_ip(ip)]
|
16
16
|
end
|
17
17
|
|
18
18
|
protected
|
19
19
|
def self.sessions
|
20
20
|
@sessions ||= {}
|
21
21
|
end
|
22
|
+
|
23
|
+
def self.normalize_ip(ip)
|
24
|
+
ip == '::1' ? '127.0.0.1' : ip
|
25
|
+
end
|
26
|
+
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
data/lib/tshield/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tshield
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Rubin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -175,6 +175,7 @@ files:
|
|
175
175
|
- spec/spec_helper.rb
|
176
176
|
- spec/tshield/configuration_spec.rb
|
177
177
|
- spec/tshield/fixtures/config/tshield.yml
|
178
|
+
- spec/tshield/request_spec.rb
|
178
179
|
- tshield.gemspec
|
179
180
|
homepage: https://github.com/diegorubin/tshield
|
180
181
|
licenses:
|
@@ -204,3 +205,4 @@ test_files:
|
|
204
205
|
- spec/spec_helper.rb
|
205
206
|
- spec/tshield/fixtures/config/tshield.yml
|
206
207
|
- spec/tshield/configuration_spec.rb
|
208
|
+
- spec/tshield/request_spec.rb
|