readme-metrics 2.2.0 → 2.4.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
  SHA256:
3
- metadata.gz: 7e56a6d3e2f6345dcc6b17a00b3de12223b5982bbf2ed1d88c78e7bc6155a4a1
4
- data.tar.gz: 40223680001e31af74173f227cc0b56cd74ef5c0c81437328d2506a303482d2b
3
+ metadata.gz: 1a539e9a1512385c01ba8b037b3325e89a762b2965f5b2b5aa6394989b2774d7
4
+ data.tar.gz: 3c95661d00dc2392ec8f805371ab8ed102335d697bfed20de6c11f14826e0c2e
5
5
  SHA512:
6
- metadata.gz: afd8efd488128281a9d3e5c952b17a678e499e145aa6a448fdbe05a8b748bdcd36e2d01ff83195362931fd8158d884a8804b72e8f9d863237a729e632acab611
7
- data.tar.gz: ebd3eb9482710916a7d969d6315147ab36526d53de86f12abc49892325d7405de2074d2744a89cb3160ea9b37050117335b1fc834900d74470d2301273865fda
6
+ metadata.gz: ca188a7f894ee7718907c902a1ec724b4aff21afcbc2007a3ec14cda78b8abb1ea2f846cda8ef8c882ec984de304a2f9bd7c4e530f8a7034682f365ee0271e6a
7
+ data.tar.gz: c90dd5e1b59db664af5f26b4f13c6e544eabe5a766ed2d8e7170e0dfd93849846efa5ff66251535ed2c957e772fe69936c61e3903159b9ed23267a9b322ec933
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- readme-metrics (2.1.0)
4
+ readme-metrics (2.4.0)
5
5
  httparty (~> 0.18)
6
+ rack (>= 2.2, < 4)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -14,15 +15,13 @@ GEM
14
15
  safe_yaml (~> 1.0.0)
15
16
  diff-lcs (1.4.4)
16
17
  hashdiff (1.0.1)
17
- httparty (0.20.0)
18
- mime-types (~> 3.0)
18
+ httparty (0.21.0)
19
+ mini_mime (>= 1.0.0)
19
20
  multi_xml (>= 0.5.2)
20
21
  json (2.6.2)
21
22
  json-schema (2.8.1)
22
23
  addressable (>= 2.4)
23
- mime-types (3.4.1)
24
- mime-types-data (~> 3.2015)
25
- mime-types-data (3.2022.0105)
24
+ mini_mime (1.1.5)
26
25
  multi_xml (0.6.0)
27
26
  parallel (1.22.1)
28
27
  parser (3.1.2.1)
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  <p align="center">
12
12
  <a href="https://rubygems.org/gems/readme-metrics"><img src="https://img.shields.io/gem/v/readme-metrics.svg?style=for-the-badge" alt="Latest release"></a>
13
- <a href="https://github.com/readmeio/metrics-sdks"><img src="https://img.shields.io/github/workflow/status/readmeio/metrics-sdks/ruby.svg?style=for-the-badge" alt="Build status"></a>
13
+ <a href="https://github.com/readmeio/metrics-sdks"><img src="https://img.shields.io/github/actions/workflow/status/readmeio/metrics-sdks/ruby.yml?branch=main&style=for-the-badge" alt="Build status"></a>
14
14
  </p>
15
15
 
16
16
  With [ReadMe's Metrics API](https://readme.com/metrics) your team can get deep insights into your API's usage. If you're a developer, it takes a few small steps to send your API logs to [ReadMe](http://readme.com). Here's an overview of how the integration works:
@@ -1,8 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
- ruby '3.1.2'
5
-
6
4
  # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
7
5
  gem 'rails', '~> 7.0.3', '>= 7.0.3.1'
8
6
 
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- readme-metrics (2.1.0)
4
+ readme-metrics (2.3.0)
5
5
  httparty (~> 0.18)
6
+ rack (>= 2.2, < 4)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -82,8 +83,8 @@ GEM
82
83
  erubi (1.11.0)
83
84
  globalid (1.0.0)
84
85
  activesupport (>= 5.0)
85
- httparty (0.20.0)
86
- mime-types (~> 3.0)
86
+ httparty (0.21.0)
87
+ mini_mime (>= 1.0.0)
87
88
  multi_xml (>= 0.5.2)
88
89
  i18n (1.12.0)
89
90
  concurrent-ruby (~> 1.0)
@@ -97,11 +98,8 @@ GEM
97
98
  mini_mime (>= 0.1.1)
98
99
  marcel (1.0.2)
99
100
  method_source (1.0.0)
100
- mime-types (3.4.1)
101
- mime-types-data (~> 3.2015)
102
- mime-types-data (3.2022.0105)
103
101
  mini_mime (1.1.2)
104
- mini_portile2 (2.8.0)
102
+ mini_portile2 (2.8.1)
105
103
  minitest (5.16.3)
106
104
  multi_xml (0.6.0)
107
105
  net-imap (0.2.3)
@@ -119,15 +117,15 @@ GEM
119
117
  net-protocol
120
118
  timeout
121
119
  nio4r (2.5.8)
122
- nokogiri (1.13.8)
120
+ nokogiri (1.14.3)
123
121
  mini_portile2 (~> 2.8.0)
124
122
  racc (~> 1.4)
125
- nokogiri (1.13.8-arm64-darwin)
123
+ nokogiri (1.14.3-arm64-darwin)
126
124
  racc (~> 1.4)
127
125
  puma (5.6.5)
128
126
  nio4r (~> 2.0)
129
- racc (1.6.0)
130
- rack (2.2.4)
127
+ racc (1.6.2)
128
+ rack (2.2.7)
131
129
  rack-test (2.0.2)
132
130
  rack (>= 1.3)
133
131
  rails (7.0.3.1)
@@ -157,10 +155,12 @@ GEM
157
155
  thor (~> 1.0)
158
156
  zeitwerk (~> 2.5)
159
157
  rake (13.0.6)
160
- reline (0.3.1)
158
+ reline (0.3.2)
161
159
  io-console (~> 0.5)
162
- sqlite3 (1.4.4)
163
- strscan (3.0.4)
160
+ sqlite3 (1.6.1)
161
+ mini_portile2 (~> 2.8.0)
162
+ sqlite3 (1.6.1-arm64-darwin)
163
+ strscan (3.0.6)
164
164
  thor (1.2.1)
165
165
  timeout (0.3.0)
166
166
  tzinfo (2.0.5)
@@ -182,8 +182,5 @@ DEPENDENCIES
182
182
  sqlite3 (~> 1.4)
183
183
  tzinfo-data
184
184
 
185
- RUBY VERSION
186
- ruby 3.1.2p20
187
-
188
185
  BUNDLED WITH
189
186
  2.3.11
@@ -51,7 +51,7 @@ Rails.application.configure do
51
51
  config.active_support.report_deprecations = false
52
52
 
53
53
  # Use default logging formatter so that PID and timestamp are not suppressed.
54
- config.log_formatter = ::Logger::Formatter.new
54
+ config.log_formatter = Logger::Formatter.new
55
55
 
56
56
  # Use a different logger for distributed setups.
57
57
  # require "syslog/logger"
@@ -1,3 +1,4 @@
1
+ require 'readme/mask'
1
2
  require 'rack'
2
3
  require 'rack/request'
3
4
  require_relative 'content_type_helper'
@@ -6,15 +7,32 @@ module Readme
6
7
  class HttpRequest
7
8
  include ContentTypeHelper
8
9
 
10
+ IS_RACK_V3 = Gem.loaded_specs['rack'].version > Gem::Version.create('3.0')
11
+
12
+ # rubocop:disable Style/MutableConstant
9
13
  HTTP_NON_HEADERS = [
10
14
  Rack::HTTP_COOKIE,
11
- Rack::HTTP_VERSION,
12
15
  Rack::HTTP_HOST,
13
16
  Rack::HTTP_PORT
14
- ].freeze
17
+ ]
18
+ # rubocop:enable Style/MutableConstant
19
+
20
+ if IS_RACK_V3
21
+ HTTP_NON_HEADERS.push(Rack::SERVER_PROTOCOL)
22
+ else
23
+ HTTP_NON_HEADERS.push(Rack::HTTP_VERSION)
24
+ end
25
+
26
+ HTTP_NON_HEADERS.freeze
15
27
 
16
28
  def initialize(env)
29
+ # Sanitize the auth header, if it exists
30
+ env['HTTP_AUTHORIZATION'] = Readme::Mask.mask(env['HTTP_AUTHORIZATION']) if env.key?('HTTP_AUTHORIZATION')
17
31
  @request = Rack::Request.new(env)
32
+
33
+ return unless IS_RACK_V3
34
+
35
+ @input = Rack::RewindableInput.new(@request.body)
18
36
  end
19
37
 
20
38
  def url
@@ -30,7 +48,11 @@ module Readme
30
48
  end
31
49
 
32
50
  def http_version
33
- @request.get_header(Rack::HTTP_VERSION)
51
+ if IS_RACK_V3
52
+ @request.get_header(Rack::SERVER_PROTOCOL)
53
+ else
54
+ @request.get_header(Rack::HTTP_VERSION)
55
+ end
34
56
  end
35
57
 
36
58
  def request_method
@@ -64,11 +86,17 @@ module Readme
64
86
  end
65
87
 
66
88
  def body
67
- @request.body.rewind
68
- content = @request.body.read
69
- @request.body.rewind
70
-
71
- content
89
+ if IS_RACK_V3
90
+ body = @input.read
91
+ @input.rewind
92
+ body
93
+ else
94
+ @request.body.rewind
95
+ content = @request.body.read
96
+ @request.body.rewind
97
+
98
+ content
99
+ end
72
100
  end
73
101
 
74
102
  def parsed_form_data
@@ -0,0 +1,11 @@
1
+ require 'digest'
2
+
3
+ module Readme
4
+ class Mask
5
+ def self.mask(data)
6
+ digest = Digest::SHA2.new(512).base64digest(data)
7
+ opts = data.length >= 4 ? data[-4, 4] : data
8
+ "sha512-#{digest}?#{opts}"
9
+ end
10
+ end
11
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Readme
4
4
  class Metrics
5
- VERSION = '2.2.0'
5
+ VERSION = '2.4.0'
6
6
  end
7
7
  end
@@ -1,3 +1,4 @@
1
+ require 'readme/mask'
1
2
  require 'socket'
2
3
  require 'securerandom'
3
4
 
@@ -15,6 +16,7 @@ module Readme
15
16
  @har = har
16
17
  @user_info = info.slice(:id, :label, :email)
17
18
  @user_info[:id] = info[:api_key] unless info[:api_key].nil? # swap api_key for id if api_key is present
19
+ @user_info[:id] = Readme::Mask.mask(@user_info[:id])
18
20
  @log_id = info[:log_id]
19
21
  @ignore = info[:ignore]
20
22
  @ip_address = ip_address
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ['lib']
28
28
 
29
29
  spec.add_runtime_dependency 'httparty', '~> 0.18'
30
+ spec.add_runtime_dependency 'rack', '>= 2.2', '< 4'
30
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: readme-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ReadMe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-16 00:00:00.000000000 Z
11
+ date: 2024-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -24,6 +24,26 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.18'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.2'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '4'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '2.2'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '4'
27
47
  description: Middleware for logging requests to Readme's metrics API
28
48
  email:
29
49
  - support@readme.io
@@ -82,6 +102,7 @@ files:
82
102
  - lib/readme/har/serializer.rb
83
103
  - lib/readme/http_request.rb
84
104
  - lib/readme/http_response.rb
105
+ - lib/readme/mask.rb
85
106
  - lib/readme/metrics.rb
86
107
  - lib/readme/metrics/version.rb
87
108
  - lib/readme/payload.rb
@@ -110,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
131
  - !ruby/object:Gem::Version
111
132
  version: '0'
112
133
  requirements: []
113
- rubygems_version: 3.1.4
134
+ rubygems_version: 3.4.21
114
135
  signing_key:
115
136
  specification_version: 4
116
137
  summary: SDK for Readme's metrics API