akita-har_logger 0.2.2 → 0.2.3

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
  SHA256:
3
- metadata.gz: c90d947db8a7fb0e4c9188ed34e7275e4697bb9380991f9a734999fe5e0350ab
4
- data.tar.gz: eb5d3fc053f127f1da20fff703c2a16db0ed667c824dc1172c184a3989ac9ac8
3
+ metadata.gz: 5a4d073bcb2347b0527e3dab531c77770a29c29326bf76cb2ca09724206af8e5
4
+ data.tar.gz: 2fc8b6e0b4721699f87a08ba098b3d6137835b14c01eeb73b945a453a98267f2
5
5
  SHA512:
6
- metadata.gz: 3b1a61bfed03c77f5f0bd777211255f809beb535767154a294078dabed3ddadccaf6907205cab69a6c5087013567f7848584fe34c0f1795c4e127e5448e254ca
7
- data.tar.gz: 1eb5fcb88a1b874929710ab249e4d40332cc2fec3cfdd4a5e637d38694ecb7cf434f2d5578c838299736cb26ba820254256a7077b29ddd7a0f81c943b145a190
6
+ metadata.gz: f07983494e000f9ed64ffdfe346869bdd0b574db21210a39de0199d1df81f877262c2623c72ca918c792cff77a29872224a5ba3d5f3ac12691381d8caf89bc17
7
+ data.tar.gz: 513be52cfaf7f114cb95ed33df45528336db9f9945ac5252db12a9abfe30103308cd1d7d92585ec6ac8897c231129e0d83cee596a3df3034946c88b5c59dcde6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- akita-har_logger (0.2.2)
4
+ akita-har_logger (0.2.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -31,4 +31,4 @@ DEPENDENCIES
31
31
  rspec (~> 3.10)
32
32
 
33
33
  BUNDLED WITH
34
- 2.2.16
34
+ 2.2.23
@@ -3,14 +3,24 @@
3
3
  module Akita
4
4
  module HarLogger
5
5
  class HarUtils
6
+ # Rack apparently uses 8-bit ASCII for everything, even when the string
7
+ # is not 8-bit ASCII. This reinterprets the given string as UTF-8.
8
+ def self.fixEncoding(v)
9
+ if v == nil || v.encoding == Encoding::UTF_8 then
10
+ v
11
+ else
12
+ String.new(v).force_encoding(Encoding::UTF_8)
13
+ end
14
+ end
15
+
6
16
  # Converts a Hash into a list of Hash objects. Each entry in the given
7
17
  # Hash will be represented in the output by a Hash object that maps
8
18
  # 'name' to the entry's key and 'value' to the entry's value.
9
19
  def self.hashToList(hash)
10
20
  hash.reduce([]) { |accum, (k, v)|
11
21
  accum.append({
12
- name: k,
13
- value: v,
22
+ name: fixEncoding(k),
23
+ value: fixEncoding(v),
14
24
  })
15
25
  }
16
26
  end
@@ -11,7 +11,7 @@ module Akita
11
11
 
12
12
  @self = {
13
13
  method: getMethod(env),
14
- url: req.url,
14
+ url: HarUtils.fixEncoding(req.url),
15
15
  httpVersion: getHttpVersion(env),
16
16
  cookies: getCookies(env),
17
17
  headers: getHeaders(env),
@@ -33,7 +33,7 @@ module Akita
33
33
 
34
34
  # Obtains the client's request method from an HTTP environment.
35
35
  def getMethod(env)
36
- (Rack::Request.new env).request_method
36
+ HarUtils.fixEncoding (Rack::Request.new env).request_method
37
37
  end
38
38
 
39
39
  # Obtains the client-requested HTTP version from an HTTP environment.
@@ -41,7 +41,9 @@ module Akita
41
41
  # The environment doesn't have HTTP_VERSION when running with `rspec`;
42
42
  # assume HTTP/1.1 when this happens. We don't return nil, so we can
43
43
  # calculate the size of the headers.
44
- env.key?('HTTP_VERSION') ? env['HTTP_VERSION'] : 'HTTP/1.1'
44
+ env.key?('HTTP_VERSION') ?
45
+ HarUtils.fixEncoding(env['HTTP_VERSION']) :
46
+ 'HTTP/1.1'
45
47
  end
46
48
 
47
49
  # Builds a list of cookie objects from an HTTP environment.
@@ -71,13 +73,28 @@ module Akita
71
73
  HarUtils.hashToList paramMap
72
74
  end
73
75
 
76
+ # Obtains the character set of the posted data from an HTTP environment.
77
+ def getPostDataCharSet(env)
78
+ req = Rack::Request.new env
79
+ if req.content_charset != nil then
80
+ return req.content_charset
81
+ end
82
+
83
+ # RFC 2616 says that "text/*" defaults to ISO-8859-1.
84
+ if env['CONTENT_TYPE'].start_with?('text/') then
85
+ return Encoding::ISO_8859_1
86
+ end
87
+
88
+ Encoding.default_external
89
+ end
90
+
74
91
  # Obtains the posted data from an HTTP environment.
75
92
  def getPostData(env)
76
93
  if env.key?('CONTENT_TYPE') && env['CONTENT_TYPE'] then
77
94
  result = { mimeType: env['CONTENT_TYPE'] }
78
95
 
79
96
  # Populate 'params' if we have URL-encoded parameters. Otherwise,
80
- # populate 'text.
97
+ # populate 'text'.
81
98
  req = Rack::Request.new env
82
99
  if env['CONTENT_TYPE'] == 'application/x-www-form-urlencoded' then
83
100
  # Decoded parameters can be found as a map in req.params.
@@ -96,7 +113,12 @@ module Akita
96
113
  result[:text] = req.params.to_json
97
114
  end
98
115
  else
99
- result[:text] = req.body.string
116
+ # Rack has been observed to use ASCII-8BIT encoding for the request
117
+ # body when the request specifies UTF-8. Reinterpret the content
118
+ # body according to what the request says it is, and re-encode into
119
+ # UTF-8.
120
+ result[:text] = req.body.string.encode(Encoding::UTF_8,
121
+ getPostDataCharSet(env))
100
122
  end
101
123
 
102
124
  result
@@ -36,7 +36,9 @@ module Akita
36
36
  # The environment doesn't have HTTP_VERSION when running with `rspec`;
37
37
  # assume HTTP/1.1 when this happens. We don't return nil, so we can
38
38
  # calculate the size of the headers.
39
- env.key?('HTTP_VERSION') ? env['HTTP_VERSION'] : 'HTTP/1.1'
39
+ env.key?('HTTP_VERSION') ?
40
+ HarUtils.fixEncoding(env['HTTP_VERSION']) :
41
+ 'HTTP/1.1'
40
42
  end
41
43
 
42
44
  def getCookies(headers)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Akita
4
4
  module HarLogger
5
- VERSION = "0.2.2"
5
+ VERSION = "0.2.3"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akita-har_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jed Liu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-05 00:00:00.000000000 Z
11
+ date: 2021-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  requirements: []
72
- rubygems_version: 3.2.15
72
+ rubygems_version: 3.2.21
73
73
  signing_key:
74
74
  specification_version: 4
75
75
  summary: Rails middleware for HAR logging