httplog 1.4.3 → 1.5.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
  SHA256:
3
- metadata.gz: 9ce910d7c04847c28f836de26906c0c50aa4642b553b298d15067bf6ee25db56
4
- data.tar.gz: 8600e756f28e033b6e39ac91235f69bf772fe467b05040d88c02ce54e982ef0b
3
+ metadata.gz: 97cbba2cdb0af09dcf6664e290981b074a40f9c91d81be74a737a746bfc1e612
4
+ data.tar.gz: 228590a39ab68d89d3261f219e2bac4945f4fde315219943cbbacdfc1aaa2922
5
5
  SHA512:
6
- metadata.gz: 6a76055079c7bfa4a229fda0861f90276c94cb64859ae7ce3c269e86656f3ad69fb3d5e8ed7eb2b82e9fe1facb0a73619951f099aafbbac7b0b503a52eb21046
7
- data.tar.gz: f541eec119d175cc50563bc2673d60dae6246a43bcf570f9fe4db9a6295697ea94f7ffddb709aa8c9d0264f274f48c42bca3322d3364c1edd47298a984421363
6
+ metadata.gz: d857f2dc7142fb7243371afd4d3993b65ced6092ecb6ac361abbd2957bc1884e18131ca707b3e2c9dc694ad9996c09e12ddf7b31f978d8d55def35322159a861
7
+ data.tar.gz: eafbb1ef94500b468083f8073049749e6073d2ec423fadae8f6aca3221624bb914f28a489305f35cd5fb222b247eb81f5b2446f4694f919959267d83c0bfcbe7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.5.0 - 2021-05-20
2
+
3
+ * Support for Ruby 2.7 and frozen strings
4
+ * Development dependency updates
5
+ * Dropped support for net/http v3
6
+ * Performance tweaks
7
+ * Fix for RestClient body read issue (WARNING: this may be reverted, see [#105](https://github.com/trusche/httplog/issues/105))
8
+
1
9
  ## 1.4.3 - 2020-06-10
2
10
 
3
11
  * Masking `password` parameter by default... doh.
data/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  ## httplog
2
2
 
3
- **VERSION 1.4.0 and 1.4.1 HAVE BEEN YANKED** from rubygems.org due to [this issue](https://github.com/trusche/httplog/issues/89), please update to version 1.4.2 or higher. Sorry about that...
4
-
5
3
  [![Gem Version](https://badge.fury.io/rb/httplog.svg)](http://badge.fury.io/rb/httplog) [![Build Status](https://travis-ci.org/trusche/httplog.svg?branch=master)](https://travis-ci.org/trusche/httplog) [![Code Climate](https://codeclimate.com/github/trusche/httplog.svg)](https://codeclimate.com/github/trusche/httplog)
6
4
  [![Release Version](https://img.shields.io/github/release/trusche/httplog.svg)](https://img.shields.io/github/release/trusche/httplog.svg)
7
5
  <a href="https://www.bearer.sh?ref=httplog"><img src="/bearer-badge.png" height="20px"/></a>
@@ -12,7 +10,7 @@ Requires ruby >= 2.5
12
10
 
13
11
  This gem works with the following ruby modules and libraries:
14
12
 
15
- * [Net::HTTP](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/index.html)
13
+ * [Net::HTTP](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/index.html) v4+
16
14
  * [Ethon](https://github.com/typhoeus/ethon)
17
15
  * [Excon](https://github.com/geemus/excon)
18
16
  * [OpenURI](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/index.html)
@@ -103,6 +101,9 @@ HttpLog.configure do |config|
103
101
 
104
102
  # Mask the values of sensitive request parameters
105
103
  config.filter_parameters = %w[password]
104
+
105
+ # Customize the prefix with a proc or lambda
106
+ config.prefix = ->{ "[httplog] #{Time.now} " }
106
107
  end
107
108
  ```
108
109
 
@@ -267,9 +268,6 @@ a suggestion for a fix, please open an issue or, even better, submit a pull requ
267
268
 
268
269
  * Benchmarking only covers the time between starting the HTTP request and receiving the response. It does *not* cover the time it takes to establish the TCP connection.
269
270
 
270
- * When using [REST Client](https://github.com/rest-client/rest-client), POST requests might be missing the requests
271
- data. See #54 for details.
272
-
273
271
  ### Running the specs
274
272
 
275
273
  Make sure you have the necessary dependencies installed by running `bundle install`.
data/httplog.gemspec CHANGED
@@ -26,14 +26,15 @@ Gem::Specification.new do |gem|
26
26
 
27
27
  gem.add_development_dependency 'ethon', ['~> 0.11']
28
28
  gem.add_development_dependency 'excon', ['~> 0.60']
29
- gem.add_development_dependency 'faraday', ['~> 0.14']
29
+ gem.add_development_dependency 'faraday', ['~> 1.3']
30
30
  gem.add_development_dependency 'guard-rspec', ['~> 4.7']
31
31
  gem.add_development_dependency 'http', ['~> 4.0']
32
32
  gem.add_development_dependency 'httparty', ['~> 0.16']
33
33
  gem.add_development_dependency 'httpclient', ['~> 2.8']
34
+ gem.add_development_dependency 'rest-client', ['~> 2.0']
34
35
  gem.add_development_dependency 'listen', ['~> 3.0']
35
36
  gem.add_development_dependency 'patron', ['~> 0.12']
36
- gem.add_development_dependency 'rake', ['~> 12.3']
37
+ gem.add_development_dependency 'rake', ['~> 13.0']
37
38
  gem.add_development_dependency 'rspec', ['~> 3.7']
38
39
  gem.add_development_dependency 'simplecov', ['~> 0.15']
39
40
  gem.add_development_dependency 'thin', ['~> 1.7']
@@ -11,12 +11,22 @@ module Net
11
11
  bm = Benchmark.realtime do
12
12
  @response = orig_request(req, body, &block)
13
13
  end
14
+ body_stream = req.body_stream
15
+ request_body = if body_stream
16
+ body_stream.to_s # read and rewind for RestClient::Payload::Base
17
+ body_stream.rewind if body_stream.respond_to?(:rewind) # RestClient::Payload::Base has no method rewind
18
+ body_stream.read
19
+ elsif req.body.nil? || req.body.empty?
20
+ body
21
+ else
22
+ req.body
23
+ end
14
24
 
15
25
  if HttpLog.url_approved?(url) && started?
16
26
  HttpLog.call(
17
27
  method: req.method,
18
28
  url: url,
19
- request_body: req.body.nil? || req.body.empty? ? body : req.body,
29
+ request_body: request_body,
20
30
  request_headers: req.each_header.collect,
21
31
  response_code: @response.code,
22
32
  response_body: @response.body,
@@ -121,22 +121,24 @@ module HttpLog
121
121
  raise BodyParsingError, '(not available yet)'
122
122
  end
123
123
 
124
- body = body.to_s if defined?(HTTP::Response::Body) && body.is_a?(HTTP::Response::Body)
125
- body = body.dup
124
+ body_copy = body.dup
125
+ body_copy = body.to_s if defined?(HTTP::Response::Body) && body.is_a?(HTTP::Response::Body)
126
+ return nil if body_copy.nil? || body_copy.empty?
126
127
 
127
- if encoding =~ /gzip/ && body && !body.empty?
128
+
129
+ if encoding =~ /gzip/
128
130
  begin
129
- sio = StringIO.new(body.to_s)
131
+ sio = StringIO.new(body_copy.to_s)
130
132
  gz = Zlib::GzipReader.new(sio)
131
- body = gz.read
133
+ body_copy = gz.read
132
134
  rescue Zlib::GzipFile::Error
133
135
  log("(gzip decompression failed)")
134
136
  end
135
137
  end
136
138
 
137
- result = utf_encoded(body.to_s, content_type)
139
+ result = utf_encoded(body_copy.to_s, content_type)
138
140
 
139
- if mask_body && body && !body.empty?
141
+ if mask_body
140
142
  if content_type =~ /json/
141
143
  result = begin
142
144
  masked_data config.json_parser.load(result)
@@ -259,12 +261,14 @@ module HttpLog
259
261
  # in its entirety.
260
262
  return (config.filter_parameters.include?(key.downcase) ? PARAM_MASK : msg) if key
261
263
 
262
- # Otherwise, we'll parse Strings for key=valye pairs...
264
+ # Otherwise, we'll parse Strings for key=value pairs,
265
+ # for name="key"\n value...
263
266
  case msg
264
267
  when *string_classes
265
268
  config.filter_parameters.reduce(msg) do |m,key|
266
269
  scrubbed = m.to_s.encode('UTF-8', invalid: :replace, undef: :replace)
267
- scrubbed.gsub(/(#{key})=[^&]+/i, "#{key}=#{PARAM_MASK}")
270
+ scrubbed.to_s.gsub(/(#{key})=[^&]+/i, "#{key}=#{PARAM_MASK}")
271
+ .gsub(/name="#{key}"\s+\K[\s\w]+/, "#{PARAM_MASK}\r\n") # multi-part Faraday
268
272
  end
269
273
  # ...and recurse over hashes
270
274
  when *hash_classes
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HttpLog
4
- VERSION = '1.4.3'.freeze
4
+ VERSION = '1.5.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httplog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thilo Rusche
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-11 00:00:00.000000000 Z
11
+ date: 2021-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ethon
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.14'
47
+ version: '1.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.14'
54
+ version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '2.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rest-client
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: listen
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '12.3'
159
+ version: '13.0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '12.3'
166
+ version: '13.0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rspec
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -274,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
288
  - !ruby/object:Gem::Version
275
289
  version: '0'
276
290
  requirements: []
277
- rubygems_version: 3.0.3
291
+ rubygems_version: 3.1.4
278
292
  signing_key:
279
293
  specification_version: 4
280
294
  summary: Log outgoing HTTP requests.