firebase_id_token 2.3.2 → 2.5.1

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: 04e416cf72a26dfef4ba1555005cce301af06b10d68c34cb31873e4de4204307
4
- data.tar.gz: b35dbae1fcb4f1da7e6a240be49662ec090e70f22e9e940a2173583c35a3e91b
3
+ metadata.gz: 789eeab7c0ec306d0a64b2c7564f590fdf54d2d93891d8c15f6797a49dada26a
4
+ data.tar.gz: 236c1161cb5141fa7b1658660463431715a3a449c48e94fbc3424df92101dd7a
5
5
  SHA512:
6
- metadata.gz: 59a99e199abc3b4280500cc6202b78d125cb89874c7e4c0fc19956c25f89362ec8262af785fcfd1efd38c8a429dc5a231c6cca39b0a170c007cf7d2962c84429
7
- data.tar.gz: c3654c443865086ba7aaaa66a5851ea6cf6549fc590ae24055491c0b44619a22399ea148d34e7e245dd5fc7ccf0bad0e04a2c3a3d1746ba1b40088db212e8f0b
6
+ metadata.gz: 8e5d277ce83b6deb7d9434d62d4545b405d6bd7a7248588fca7b21209cfac8181bd1593d96b11119a64652a76f4d3463f28ab0645e2c3d3f5c3d5cce8a0b4644
7
+ data.tar.gz: 8eddfe41e764ce2ab21b797fd27853d96466cde7339bd7ef56021f1d835e92dd388cdabb0f027a112abce83a1d5cbc0b6a36e24332e9bc453d67ad9a9f3f29df
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.0
5
- before_install: gem install bundler -v 1.14.6
4
+ - 2.6.3
5
+ before_install: gem install bundler -v 1.17.2
6
6
  services:
7
7
  - redis-server
data/CHANGELOG.md ADDED
@@ -0,0 +1,127 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [2.5.1] - 2022-08-15
10
+
11
+ ### Fixed
12
+ - "[New caching doesn't honor request! calls](https://github.com/fschuindt/firebase_id_token/issues/35)", by reverting "[Caching certificates on memory.](https://github.com/fschuindt/firebase_id_token/pull/33)", PR #33.
13
+
14
+ ## [2.5.0] - 2022-04-13
15
+
16
+ ### Fixed
17
+ - Local Code Execution through Argument Injection via dash leading git url parameter in Gemfile [CVE-2021-43809](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43809).
18
+ - Dependency Confusion in Bundler [CVE-2020-36327](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-36327).
19
+ - Insecure path handling in Bundler [CVE-2019-3881](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-3881).
20
+
21
+ ### Changed
22
+ - Using Bundler 2.3.11.
23
+ - Using `Time.current` instead of `Time.now` to work with timezones [PR 34](https://github.com/fschuindt/firebase_id_token/pull/34).
24
+ - Caching certificates on memory using `Thread` to avoid unnecessary calls into Redis [PR 33](https://github.com/fschuindt/firebase_id_token/pull/33).
25
+
26
+ ## [2.4.0] - 2020-05-02
27
+
28
+ ### Fixed
29
+ - Rake development dependency vulnerability [CVE-2020-8130](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8130).
30
+
31
+ ### Changed
32
+ - Using Bundler 1.17.2.
33
+
34
+ ### Added
35
+ - Ability to raise errors when verifying tokens.
36
+ - `FirebaseIdToken::Certificates.find!` method.
37
+ - `FirebaseIdToken::Signatures.verify!` method.
38
+ - `FirebaseIdToken::Exceptions::CertificateNotFound` exception.
39
+ - `:raise_error` option to `FirebaseIdToken::Signature.verify`.
40
+ - `CHANGELOG.md` file.
41
+
42
+ ## [2.3.2] - 2020-02-15
43
+
44
+ ### Fixed
45
+ - Certificate fixture not accessible when packing Gem into Rails application.
46
+
47
+ ### Changed
48
+ - Bumped Bundler version to 1.14.
49
+
50
+ ## [2.3.1] - 2019-08-13
51
+
52
+ ### Fixed
53
+ - Certificate fixture reading issue.
54
+
55
+ ### Added
56
+ - Test mode.
57
+ - Test mode documentation.
58
+
59
+ ## [2.3.0] - 2018-06-18
60
+
61
+ ### Changed
62
+ - Started to use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
63
+ - Runtime dependencies versions upgraded.
64
+ - Use Redis `>= 3.3.3`.
65
+
66
+ ## [2.2.0] - 2018-05-21
67
+ *Nothing tracked, release skipped.*
68
+
69
+ ## [2.1.0] - 2018-04-09
70
+
71
+ ### Fixed
72
+ - `FirebaseIdToken::Signature.verify` now returns `nil` for newly issued tokens.
73
+
74
+ ## [2.0.0] - 2017-12-09
75
+
76
+ ### Fixed
77
+ - Typo on Rake task `force_request` name.
78
+
79
+ ## [1.3.0] - 2017-09-15
80
+
81
+ ### Changed
82
+ - Renamed `Certificates.request_anyway` to `Certificates.request!` (`Certificates.request_anyway` was kept for backwards compatibility.
83
+
84
+ ### Fixed
85
+ - Documentaiton typos.
86
+ - Initializer typos.
87
+
88
+ ## [1.2.2] - 2017-04-29
89
+
90
+ ### Changed
91
+ - Recommended people to use cron tasks instead of background jobs.
92
+ - Set certificates TTL based on cache-control's max-age.
93
+ - Documentation now warns about request during application start in Rails.
94
+
95
+ ### Fixed
96
+ - Documentation typos.
97
+
98
+ ## [1.2.1] - 2017-04-27
99
+
100
+ ### Changed
101
+ - Small improvements on documentation.
102
+
103
+ ## [1.2.0] - 2017-04-26
104
+
105
+ ### Changed
106
+ - The Gem was marked as "ready to use".
107
+
108
+ ## [1.1.0] - 2017-04-26
109
+ *Nothing tracked.*
110
+
111
+ ## [1.0.0] - 2017-04-26
112
+ *Version removed.*
113
+
114
+ ## [0.1.0] - 2017-04-23
115
+ *Version removed.*
116
+
117
+ [2.5.1]: https://github.com/fschuindt/firebase_id_token/compare/2.5.0...2.5.1
118
+ [2.5.0]: https://github.com/fschuindt/firebase_id_token/compare/2.4.0...2.5.0
119
+ [2.4.0]: https://github.com/fschuindt/firebase_id_token/compare/2.3.2...2.4.0
120
+ [2.3.2]: https://github.com/fschuindt/firebase_id_token/compare/2.3.1...2.3.2
121
+ [2.3.1]: https://github.com/fschuindt/firebase_id_token/compare/2.3.0...2.3.1
122
+ [2.3.0]: https://github.com/fschuindt/firebase_id_token/compare/2.0.0...2.3.0
123
+ [2.1.0]: https://github.com/fschuindt/firebase_id_token/compare/2.0.0...2.1.0
124
+ [2.0.0]: https://github.com/fschuindt/firebase_id_token/compare/1.3.0...2.0.0
125
+ [1.3.0]: https://github.com/fschuindt/firebase_id_token/compare/1.2.2...1.3.0
126
+ [1.2.2]: https://github.com/fschuindt/firebase_id_token/compare/1.2.1...1.2.2
127
+ [1.2.1]: https://github.com/fschuindt/firebase_id_token/compare/1.2.0...1.2.1
data/README.md CHANGED
@@ -29,7 +29,7 @@ gem install firebase_id_token
29
29
 
30
30
  or in your Gemfile
31
31
  ```
32
- gem 'firebase_id_token', '~> 2.3.1'
32
+ gem 'firebase_id_token', '~> 2.5.1'
33
33
  ```
34
34
  then
35
35
  ```
@@ -0,0 +1,9 @@
1
+ version: '3'
2
+
3
+ services:
4
+ redis:
5
+ image: redis:5-alpine
6
+ ports:
7
+ - "6379:6379"
8
+ expose:
9
+ - 6379
@@ -22,8 +22,8 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_development_dependency 'bundler'
26
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'bundler', '~> 2.3', '>= 2.3.11'
26
+ spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
27
27
  spec.add_development_dependency 'rspec', '~> 3.0'
28
28
  spec.add_development_dependency 'redcarpet', '~> 3.4', '>= 3.4.0'
29
29
  spec.add_development_dependency 'simplecov', '~> 0.14.1'
@@ -111,13 +111,34 @@ module FirebaseIdToken
111
111
  # FirebaseIdToken::Certificates.request
112
112
  # cert = FirebaseIdToken::Certificates.find "1d6d01f4w7d54c7[...]"
113
113
  # #=> <OpenSSL::X509::Certificate: subject=#<OpenSSL [...]
114
- def self.find(kid)
114
+ def self.find(kid, raise_error: false)
115
115
  certs = new.local_certs
116
116
  raise Exceptions::NoCertificatesError if certs.empty?
117
117
 
118
- if certs[kid]
119
- OpenSSL::X509::Certificate.new certs[kid]
120
- end
118
+ return OpenSSL::X509::Certificate.new certs[kid] if certs[kid]
119
+
120
+ return unless raise_error
121
+
122
+ raise Exceptions::CertificateNotFound,
123
+ "Unable to find a certificate with `#{kid}`."
124
+ end
125
+
126
+ # Returns a `OpenSSL::X509::Certificate` object of the requested Key ID
127
+ # (KID) if there's one.
128
+ #
129
+ # @raise {Exceptions::CertificateNotFound} if it cannot be found.
130
+ #
131
+ # @raise {Exceptions::NoCertificatesError} if the Redis certificates
132
+ # database is empty.
133
+ #
134
+ # @param [String] kid Key ID
135
+ # @return [OpenSSL::X509::Certificate]
136
+ # @example
137
+ # FirebaseIdToken::Certificates.request
138
+ # cert = FirebaseIdToken::Certificates.find! "1d6d01f4w7d54c7[...]"
139
+ # #=> <OpenSSL::X509::Certificate: subject=#<OpenSSL [...]
140
+ def self.find!(kid)
141
+ find(kid, raise_error: true)
121
142
  end
122
143
 
123
144
  # Returns the current certificates TTL (Time-To-Live) in seconds. *Zero
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FirebaseIdToken
4
+ module Exceptions
5
+ # @see FirebaseIdToken::Certificates.find!
6
+ class CertificateNotFound < StandardError; end
7
+ end
8
+ end
@@ -42,9 +42,25 @@ module FirebaseIdToken
42
42
  # Note that it will raise a {Exceptions::NoCertificatesError} if the Redis
43
43
  # certificates database is empty. Ensure to call {Certificates.request}
44
44
  # before, ideally in a background job if you are using Rails.
45
+ #
46
+ # If you would like this to raise and error, rather than silently failing,
47
+ # you can with the `raise_error` parameter. Example:
48
+ #
49
+ # FirebaseIdToken::Signature
50
+ # .verify(token, raise_error: Rails.env.development?)
51
+ #
52
+ # @param raise_error [Boolean] default: false
45
53
  # @return [nil, Hash]
46
- def self.verify(jwt_token)
47
- new(jwt_token).verify
54
+ def self.verify(jwt_token, raise_error: false)
55
+ new(jwt_token, raise_error: raise_error).verify
56
+ end
57
+
58
+ # Equivalent to `.verify(jwt_token, raise_error: true)`.
59
+ #
60
+ # @see {Signature.verify}
61
+ # @return [Hash]
62
+ def self.verify!(jwt_token)
63
+ new(jwt_token, raise_error: true).verify
48
64
  end
49
65
 
50
66
  attr_accessor :firebase_id_token_certificates
@@ -52,21 +68,21 @@ module FirebaseIdToken
52
68
  # Loads attributes: `:project_ids` from {FirebaseIdToken::Configuration},
53
69
  # and `:kid`, `:jwt_token` from the related `jwt_token`.
54
70
  # @param [String] jwt_token Firebase ID Token
55
- def initialize(jwt_token)
71
+ def initialize(jwt_token, raise_error: false)
72
+ @raise_error = raise_error
56
73
  @project_ids = FirebaseIdToken.configuration.project_ids
57
74
  @kid = extract_kid(jwt_token)
58
75
  @jwt_token = jwt_token
59
76
  @firebase_id_token_certificates = FirebaseIdToken.configuration.certificates
60
-
61
77
  end
62
78
 
63
79
  # @see Signature.verify
64
80
  def verify
65
- certificate = firebase_id_token_certificates.find(@kid)
66
- if certificate
67
- payload = decode_jwt_payload(@jwt_token, certificate.public_key)
68
- authorize payload
69
- end
81
+ certificate = firebase_id_token_certificates.find(@kid, raise_error: @raise_error)
82
+ return unless certificate
83
+
84
+ payload = decode_jwt_payload(@jwt_token, certificate.public_key)
85
+ authorize payload
70
86
  end
71
87
 
72
88
  private
@@ -74,13 +90,17 @@ module FirebaseIdToken
74
90
  def extract_kid(jwt_token)
75
91
  JWT.decode(jwt_token, nil, false).last['kid']
76
92
  rescue StandardError
77
- 'none'
93
+ return 'none' unless @raise_error
94
+
95
+ raise
78
96
  end
79
97
 
80
98
  def decode_jwt_payload(token, cert_key)
81
99
  JWT.decode(token, cert_key, true, JWT_DEFAULTS).first
82
100
  rescue StandardError
83
- nil
101
+ return nil unless @raise_error
102
+
103
+ raise
84
104
  end
85
105
 
86
106
  def authorize(payload)
@@ -97,8 +117,8 @@ module FirebaseIdToken
97
117
  end
98
118
 
99
119
  def still_valid?(payload)
100
- payload['exp'].to_i > Time.now.to_i &&
101
- payload['iat'].to_i <= Time.now.to_i
120
+ payload['exp'].to_i > Time.current.to_i &&
121
+ payload['iat'].to_i <= Time.current.to_i
102
122
  end
103
123
 
104
124
  def issuer_authorized?(payload)
@@ -12,10 +12,10 @@ module FirebaseIdToken
12
12
  # + {Certificates.private_key}
13
13
  # + {Certificates.certificate}
14
14
  class Certificates
15
- # `.find` is stabbed to always return the same certificate.
15
+ # `.find` is stubbed to always return the same certificate.
16
16
  # @param [String] kid Key ID
17
17
  # @return [nil, OpenSSL::X509::Certificate]
18
- def self.find(kid)
18
+ def self.find(kid, raise_error: false)
19
19
  cert = certificate
20
20
  OpenSSL::X509::Certificate.new cert
21
21
  end
@@ -1,3 +1,3 @@
1
1
  module FirebaseIdToken
2
- VERSION = '2.3.2'
2
+ VERSION = '2.5.1'
3
3
  end
@@ -7,6 +7,7 @@ require 'firebase_id_token/version'
7
7
  require 'firebase_id_token/exceptions/no_certificates_error'
8
8
  require 'firebase_id_token/exceptions/certificates_request_error'
9
9
  require 'firebase_id_token/exceptions/certificates_ttl_error'
10
+ require 'firebase_id_token/exceptions/certificate_not_found'
10
11
  require 'firebase_id_token/configuration'
11
12
  require 'firebase_id_token/certificates'
12
13
  require 'firebase_id_token/signature'
@@ -49,7 +50,7 @@ module FirebaseIdToken
49
50
 
50
51
  def self.configuration
51
52
  @configuration ||= Configuration.new
52
- end
53
+ end
53
54
 
54
55
  # Resets Configuration to defaults.
55
56
  def self.reset
@@ -128,6 +128,28 @@ module FirebaseIdToken
128
128
  end
129
129
  end
130
130
 
131
+ describe '.find!' do
132
+ context 'without certificates in Redis database' do
133
+ it 'raises a exception' do
134
+ expect{ described_class.find!(kid)}.
135
+ to raise_error(Exceptions::NoCertificatesError)
136
+ end
137
+ end
138
+ context 'with certificates in Redis database' do
139
+ it 'returns a OpenSSL::X509::Certificate when it finds the kid' do
140
+ described_class.request
141
+ expect(described_class.find!(kid)).to be_a(OpenSSL::X509::Certificate)
142
+ end
143
+
144
+ it 'raises a CertificateNotFound error when it can not find the kid' do
145
+ described_class.request
146
+ expect { described_class.find!('') }
147
+ .to raise_error(Exceptions::CertificateNotFound, /Unable to find/)
148
+ end
149
+ end
150
+
151
+ end
152
+
131
153
  describe '.ttl' do
132
154
  it 'returns a positive number when has certificates in Redis' do
133
155
  described_class.request
@@ -3,11 +3,14 @@ require 'spec_helper'
3
3
  module FirebaseIdToken
4
4
  describe Signature do
5
5
  let(:jwt) { JSON.parse File.read('spec/fixtures/files/jwt.json') }
6
+ let(:raise_certificates_error) { false }
6
7
 
7
- let (:mock_certificates) {
8
- allow(Certificates).to receive(:find).with(an_instance_of(String)) {
9
- OpenSSL::X509::Certificate.new(jwt['certificate']) }
10
- }
8
+ let(:mock_certificates) do
9
+ allow(Certificates)
10
+ .to(receive(:find))
11
+ .with(an_instance_of(String), raise_error: raise_certificates_error)
12
+ .and_return(OpenSSL::X509::Certificate.new(jwt['certificate']))
13
+ end
11
14
 
12
15
  before :each do
13
16
  mock_certificates
@@ -29,5 +32,22 @@ module FirebaseIdToken
29
32
  expect(described_class.verify('aaa')).to be(nil)
30
33
  end
31
34
  end
35
+
36
+ describe '#verify!' do
37
+ let(:raise_certificates_error) { true }
38
+ it 'returns a Hash when the signature is valid' do
39
+ expect(described_class.verify!(jwt['jwt_token'])).to be_a(Hash)
40
+ end
41
+
42
+ it 'raises an error when the signature is invalid' do
43
+ expect { described_class.verify!(jwt['bad_jwt_token']) }
44
+ .to raise_error(JWT::VerificationError)
45
+ end
46
+
47
+ it 'raises an error with a invalid key format' do
48
+ expect { described_class.verify!('aaa') }
49
+ .to raise_error(JWT::DecodeError, /too many/)
50
+ end
51
+ end
32
52
  end
33
53
  end
metadata CHANGED
@@ -1,43 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firebase_id_token
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernando Schuindt
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-15 00:00:00.000000000 Z
11
+ date: 2022-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: '0'
22
+ version: 2.3.11
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.3'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: '0'
32
+ version: 2.3.11
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '10.0'
39
+ version: '12.3'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 12.3.3
34
43
  type: :development
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - "~>"
39
48
  - !ruby/object:Gem::Version
40
- version: '10.0'
49
+ version: '12.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 12.3.3
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: rspec
43
55
  requirement: !ruby/object:Gem::Requirement
@@ -56,22 +68,22 @@ dependencies:
56
68
  name: redcarpet
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 3.4.0
62
71
  - - "~>"
63
72
  - !ruby/object:Gem::Version
64
73
  version: '3.4'
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 3.4.0
65
77
  type: :development
66
78
  prerelease: false
67
79
  version_requirements: !ruby/object:Gem::Requirement
68
80
  requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: 3.4.0
72
81
  - - "~>"
73
82
  - !ruby/object:Gem::Version
74
83
  version: '3.4'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.4.0
75
87
  - !ruby/object:Gem::Dependency
76
88
  name: simplecov
77
89
  requirement: !ruby/object:Gem::Requirement
@@ -90,22 +102,22 @@ dependencies:
90
102
  name: codeclimate-test-reporter
91
103
  requirement: !ruby/object:Gem::Requirement
92
104
  requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: 1.0.0
96
105
  - - "~>"
97
106
  - !ruby/object:Gem::Version
98
107
  version: '1.0'
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 1.0.0
99
111
  type: :development
100
112
  prerelease: false
101
113
  version_requirements: !ruby/object:Gem::Requirement
102
114
  requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- version: 1.0.0
106
115
  - - "~>"
107
116
  - !ruby/object:Gem::Version
108
117
  version: '1.0'
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 1.0.0
109
121
  - !ruby/object:Gem::Dependency
110
122
  name: pry
111
123
  requirement: !ruby/object:Gem::Requirement
@@ -144,22 +156,22 @@ dependencies:
144
156
  name: redis-namespace
145
157
  requirement: !ruby/object:Gem::Requirement
146
158
  requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- version: 1.6.0
150
159
  - - "~>"
151
160
  - !ruby/object:Gem::Version
152
161
  version: '1.6'
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 1.6.0
153
165
  type: :runtime
154
166
  prerelease: false
155
167
  version_requirements: !ruby/object:Gem::Requirement
156
168
  requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: 1.6.0
160
169
  - - "~>"
161
170
  - !ruby/object:Gem::Version
162
171
  version: '1.6'
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: 1.6.0
163
175
  - !ruby/object:Gem::Dependency
164
176
  name: httparty
165
177
  requirement: !ruby/object:Gem::Requirement
@@ -184,22 +196,22 @@ dependencies:
184
196
  name: jwt
185
197
  requirement: !ruby/object:Gem::Requirement
186
198
  requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- version: 2.1.0
190
199
  - - "~>"
191
200
  - !ruby/object:Gem::Version
192
201
  version: '2.1'
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: 2.1.0
193
205
  type: :runtime
194
206
  prerelease: false
195
207
  version_requirements: !ruby/object:Gem::Requirement
196
208
  requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- version: 2.1.0
200
209
  - - "~>"
201
210
  - !ruby/object:Gem::Version
202
211
  version: '2.1'
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: 2.1.0
203
215
  description: A Ruby gem to verify the signature of Firebase ID Tokens. It uses Redis
204
216
  to store Google's x509 certificates and manage their expiration time, so you don't
205
217
  need to request Google's API in every execution and can access it as fast as reading
@@ -214,6 +226,7 @@ files:
214
226
  - ".rspec"
215
227
  - ".travis.yml"
216
228
  - ".yardopts"
229
+ - CHANGELOG.md
217
230
  - CODE_OF_CONDUCT.md
218
231
  - Gemfile
219
232
  - LICENSE.txt
@@ -221,10 +234,12 @@ files:
221
234
  - Rakefile
222
235
  - bin/console
223
236
  - bin/setup
237
+ - docker-compose.yml
224
238
  - firebase_id_token.gemspec
225
239
  - lib/firebase_id_token.rb
226
240
  - lib/firebase_id_token/certificates.rb
227
241
  - lib/firebase_id_token/configuration.rb
242
+ - lib/firebase_id_token/exceptions/certificate_not_found.rb
228
243
  - lib/firebase_id_token/exceptions/certificates_request_error.rb
229
244
  - lib/firebase_id_token/exceptions/certificates_ttl_error.rb
230
245
  - lib/firebase_id_token/exceptions/no_certificates_error.rb
@@ -245,7 +260,7 @@ homepage: https://github.com/fschuindt/firebase_id_token
245
260
  licenses:
246
261
  - MIT
247
262
  metadata: {}
248
- post_install_message:
263
+ post_install_message:
249
264
  rdoc_options: []
250
265
  require_paths:
251
266
  - lib
@@ -260,8 +275,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
260
275
  - !ruby/object:Gem::Version
261
276
  version: '0'
262
277
  requirements: []
263
- rubygems_version: 3.0.3
264
- signing_key:
278
+ rubygems_version: 3.1.4
279
+ signing_key:
265
280
  specification_version: 4
266
281
  summary: A Firebase ID Token verifier.
267
282
  test_files: []