json-jwt 1.14.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of json-jwt might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91fcaee7ac6b72ca2ac913dedf96d5720c979428de6dce8c92dfd20dc692090b
4
- data.tar.gz: 874d9dc15ae88e8378329786239ff8474bb6d79ff4ca83302734eed8e920d497
3
+ metadata.gz: 881eaf3476eb9b98f7e02ba780e2893398f79f707c55c7e151f1de8f1a344f5c
4
+ data.tar.gz: fe2329046f613383e73b4b8579d440f6e394457ad3b090fee27c373b47daa690
5
5
  SHA512:
6
- metadata.gz: 5d6bf57a02244d0661ee1a57abdbac9d549db17f25d4f65685d3055b51ad8a20c5f48fb9c50bd069d152192d8c25dd76b44cac65c72d1d66d7f6009d1399ed5d
7
- data.tar.gz: db006e919ed6ee3f5fa87bce489011ec49d87e39e734fe81e1e72dbb8863ab8fe1d30892f960868f1e45176d97950abb2bc847b20b29321bab3912fa8083ca86
6
+ metadata.gz: d337b0e27607d55697ae6e162b25674fbcc27b21fe23bfa34d42bc4812e0a35f39f95b8eff66b7a4f6de7e78e883450f6e580931164c632a0146253b7ee89d58
7
+ data.tar.gz: 0fea890071b4038cbc4ee8080d5c99388035f7642707dd1f4303bcafd7f5f9d8c2f517a5d938d988b551d680211ef6909987b6bbd7e3a5d4688136e37a469f54
@@ -0,0 +1,30 @@
1
+ name: Test Ruby
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ test:
12
+ strategy:
13
+ matrix:
14
+ os: ['ubuntu-18.04', 'ubuntu-20.04']
15
+ ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1']
16
+ # ubuntu 22.04 only supports ssl 3 and thus only ruby 3.1
17
+ include:
18
+ - os: 'ubuntu-22.04'
19
+ ruby-version: '3.1'
20
+ runs-on: ${{ matrix.os }}
21
+
22
+ steps:
23
+ - uses: actions/checkout@v3
24
+ - name: Set up Ruby
25
+ uses: ruby/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{ matrix.ruby-version }}
28
+ bundler-cache: true
29
+ - name: Run tests
30
+ run: bundle exec rake
data/.travis.yml CHANGED
@@ -3,10 +3,9 @@ before_install:
3
3
  - git submodule update --init --recursive
4
4
 
5
5
  rvm:
6
- - 2.5.8
7
- - 2.6.6
8
- - 2.7.2
9
- - 3.0.2
6
+ - 2.7.6
7
+ - 3.0.4
8
+ - 3.1.2
10
9
 
11
10
  jdk:
12
11
  - openjdk11
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.14.0
1
+ 1.15.0
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "json/jwt"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/json-jwt.gemspec CHANGED
@@ -16,8 +16,10 @@ Gem::Specification.new do |gem|
16
16
  gem.add_runtime_dependency 'activesupport', '>= 4.2'
17
17
  gem.add_runtime_dependency 'bindata'
18
18
  gem.add_runtime_dependency 'aes_key_wrap'
19
+ gem.add_runtime_dependency 'httpclient'
19
20
  gem.add_development_dependency 'rake'
20
21
  gem.add_development_dependency 'simplecov'
22
+ gem.add_development_dependency 'webmock'
21
23
  gem.add_development_dependency 'rspec'
22
24
  gem.add_development_dependency 'rspec-its'
23
25
  end
@@ -0,0 +1,34 @@
1
+ module JSON
2
+ class JWK
3
+ class Set
4
+ module Fetcher
5
+ module Debugger
6
+ class RequestFilter
7
+ # Callback called in HTTPClient (before sending a request)
8
+ # request:: HTTP::Message
9
+ def filter_request(request)
10
+ started = "======= [JSON::JWK::Set::Fetcher] HTTP REQUEST STARTED ======="
11
+ log started, request.dump
12
+ end
13
+
14
+ # Callback called in HTTPClient (after received a response)
15
+ # request:: HTTP::Message
16
+ # response:: HTTP::Message
17
+ def filter_response(request, response)
18
+ finished = "======= [JSON::JWK::Set::Fetcher] HTTP REQUEST FINISHED ======="
19
+ log '-' * 50, response.dump, finished
20
+ end
21
+
22
+ private
23
+
24
+ def log(*outputs)
25
+ outputs.each do |output|
26
+ JSON::JWK::Set::Fetcher.logger.info output
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,83 @@
1
+ module JSON
2
+ class JWK
3
+ class Set
4
+ module Fetcher
5
+ class Cache
6
+ def fetch(cache_key)
7
+ yield
8
+ end
9
+ end
10
+
11
+ def self.logger
12
+ @@logger
13
+ end
14
+ def self.logger=(logger)
15
+ @@logger = logger
16
+ end
17
+ self.logger = Logger.new(STDOUT)
18
+ self.logger.progname = 'JSON::JWK::Set::Fetcher'
19
+
20
+ def self.debugging?
21
+ @@debugging
22
+ end
23
+ def self.debugging=(boolean)
24
+ @@debugging = boolean
25
+ end
26
+ def self.debug!
27
+ self.debugging = true
28
+ end
29
+ def self.debug(&block)
30
+ original = self.debugging?
31
+ debug!
32
+ yield
33
+ ensure
34
+ self.debugging = original
35
+ end
36
+ self.debugging = false
37
+
38
+ def self.http_client
39
+ _http_client_ = HTTPClient.new(
40
+ agent_name: "JSON::JWK::Set::Fetcher (#{JSON::JWT::VERSION})"
41
+ )
42
+
43
+ # NOTE: httpclient gem seems stopped maintaining root certtificate set, use OS default.
44
+ _http_client_.ssl_config.clear_cert_store
45
+ _http_client_.ssl_config.cert_store.set_default_paths
46
+
47
+ _http_client_.request_filter << Debugger::RequestFilter.new if debugging?
48
+ http_config.try(:call, _http_client_)
49
+ _http_client_
50
+ end
51
+ def self.http_config(&block)
52
+ @@http_config ||= block
53
+ end
54
+
55
+ def self.cache=(cache)
56
+ @@cache = cache
57
+ end
58
+ def self.cache
59
+ @@cache
60
+ end
61
+ self.cache = Cache.new
62
+
63
+ def self.fetch(jwks_uri, kid:)
64
+ cache_key = [
65
+ 'json:jwk:set',
66
+ OpenSSL::Digest::MD5.hexdigest(jwks_uri),
67
+ kid
68
+ ].collect(&:to_s).join(':')
69
+ jwks = Set.new(
70
+ JSON.parse(
71
+ cache.fetch(cache_key) do
72
+ http_client.get_content(jwks_uri)
73
+ end
74
+ )
75
+ )
76
+ jwks.detect do |jwk|
77
+ jwk[:kid] && jwk[:kid] == kid
78
+ end or raise JWK::Set::KidNotFound
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
data/lib/json/jwt.rb CHANGED
@@ -1,11 +1,16 @@
1
1
  require 'openssl'
2
2
  require 'base64'
3
+ require 'httpclient'
3
4
  require 'active_support'
4
5
  require 'active_support/core_ext'
5
6
  require 'json/jose'
6
7
 
7
8
  module JSON
8
9
  class JWT < ActiveSupport::HashWithIndifferentAccess
10
+ VERSION = ::File.read(
11
+ ::File.join(::File.dirname(__FILE__), '../../VERSION')
12
+ ).chomp
13
+
9
14
  attr_accessor :blank_payload
10
15
  attr_accessor :signature
11
16
 
@@ -132,3 +137,5 @@ require 'json/jwe'
132
137
  require 'json/jwk'
133
138
  require 'json/jwk/jwkizable'
134
139
  require 'json/jwk/set'
140
+ require 'json/jwk/set/fetcher'
141
+ require 'json/jwk/set/fetcher/debugger/request_filter'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov matake
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-09 00:00:00.000000000 Z
11
+ date: 2022-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: httpclient
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,20 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rspec
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -112,11 +140,13 @@ description: JSON Web Token and its family (JSON Web Signature, JSON Web Encrypt
112
140
  and JSON Web Key) in Ruby
113
141
  email:
114
142
  - nov@matake.jp
115
- executables: []
143
+ executables:
144
+ - console
116
145
  extensions: []
117
146
  extra_rdoc_files: []
118
147
  files:
119
148
  - ".github/FUNDING.yml"
149
+ - ".github/workflows/test_ruby.yml"
120
150
  - ".gitignore"
121
151
  - ".gitmodules"
122
152
  - ".rspec"
@@ -126,19 +156,22 @@ files:
126
156
  - README.md
127
157
  - Rakefile
128
158
  - VERSION
159
+ - bin/console
129
160
  - json-jwt.gemspec
130
161
  - lib/json/jose.rb
131
162
  - lib/json/jwe.rb
132
163
  - lib/json/jwk.rb
133
164
  - lib/json/jwk/jwkizable.rb
134
165
  - lib/json/jwk/set.rb
166
+ - lib/json/jwk/set/fetcher.rb
167
+ - lib/json/jwk/set/fetcher/debugger/request_filter.rb
135
168
  - lib/json/jws.rb
136
169
  - lib/json/jwt.rb
137
170
  homepage: https://github.com/nov/json-jwt
138
171
  licenses:
139
172
  - MIT
140
173
  metadata: {}
141
- post_install_message:
174
+ post_install_message:
142
175
  rdoc_options: []
143
176
  require_paths:
144
177
  - lib
@@ -154,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
187
  version: '0'
155
188
  requirements: []
156
189
  rubygems_version: 3.1.6
157
- signing_key:
190
+ signing_key:
158
191
  specification_version: 4
159
192
  summary: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and
160
193
  JSON Web Key) in Ruby