tshield 0.3.0.0 → 0.3.3.0

Sign up to get free protection for your applications and to get access to all the features.
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