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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d38191a1b4051da47c94d62f65e23a908c2ff8b3
4
- data.tar.gz: 96b0176cb11b3f635b3671406c024d803c480b96
3
+ metadata.gz: 16569c4650ae0fb6c0f181e599c1449a4b40bbdb
4
+ data.tar.gz: 0d98311928827e374b8316f22ab015904ec28153
5
5
  SHA512:
6
- metadata.gz: 6480b0e7408e523f498d71503ac505daed9bf9a0acb55a24ea5154f42d3b1100e47af69a50e43de8e62b484627970520f13f5cf45d2044af921246d8c13c4676
7
- data.tar.gz: 9cffbac477c63f2d84b64d1c3ebc65f25a373fc34f6dd38995cae22c7306fb1f570140751d4c8d2333e11237fb08585192686260266be90d796e68eeef36a27f
6
+ metadata.gz: 927d205cf8404a59cb12f843cb87a7b6179c4f3d65652b6e5062260cf26e2e4c58b79808ea1065a151866cdbd59549c0fb41a425a9632937a066953ee30f3697
7
+ data.tar.gz: 1346a118634fe1fda37246a736d242945235a8deaa5b4942ed7a184be4f823fd1379752952bd1d10dfb0ebb74185172525e6f0c7f1e0eb240076860c90671daa
@@ -27,6 +27,10 @@ module TShield
27
27
  domains[domain]['headers'] || {}
28
28
  end
29
29
 
30
+ def get_excluded_headers(domain)
31
+ domains[domain]['excluded_headers'] || []
32
+ end
33
+
30
34
  def session_path
31
35
  @session_path ||= '/sessions'
32
36
  end
@@ -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
- response = TShield::Request.new(path, options).response
76
+ api_response = TShield::Request.new(path, options).response
77
77
 
78
78
  logger.info(
79
- "original=#{response.original} method=#{method} path=#{path} content-type=#{request_content_type}")
79
+ "original=#{api_response.original} method=#{method} path=#{path} content-type=#{request_content_type} session=#{current_session_name(request)}")
80
80
 
81
- response.body
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
- @configuration ||= TShield::Configuration.singleton
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
@@ -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
- content << {body: raw_response.body}
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
- content
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 && include_current_response?
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['header'])
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.gsub(/\//, '-').gsub(/^-/, ''))
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
@@ -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
@@ -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
 
@@ -2,7 +2,7 @@ module TShield
2
2
  class Version
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
- PATCH = 0
5
+ PATCH = 3
6
6
  PRE = 0
7
7
 
8
8
  class << self
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe TShield::Request do
4
+
5
+ describe 'when save response' do
6
+ it '' do
7
+ end
8
+ end
9
+
10
+ end
11
+
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.0.0
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-06 00:00:00.000000000 Z
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