From f4b25f6eeb718e36b7be6dcbdcfa5c4198347128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Y=C4=B1ld=C4=B1z?= Date: Mon, 7 Jun 2021 20:23:20 +0300 Subject: [PATCH 1/3] For certificates and ttl, do not do 2 redis calls and cache both of them inside thread variable. With this thread variable, we store certificate and tll on the memory and if expires at less than current time it invalidates thread variable and reloads it. --- lib/firebase_id_token/signature.rb | 15 ++++++++++++++- lib/firebase_id_token/testing/certificates.rb | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/firebase_id_token/signature.rb b/lib/firebase_id_token/signature.rb index ac2ca52..f787f54 100644 --- a/lib/firebase_id_token/signature.rb +++ b/lib/firebase_id_token/signature.rb @@ -78,7 +78,20 @@ def initialize(jwt_token, raise_error: false) # @see Signature.verify def verify - certificate = firebase_id_token_certificates.find(@kid, raise_error: @raise_error) + var_name = :_firebase_id_token_cert + Thread.current[var_name] ||= { + cert: nil, + expires_at: Time.now.utc - 1 + } + + if Thread.current[var_name][:expires_at] <= Time.now.utc + Thread.current[var_name] = { + cert: firebase_id_token_certificates.find(@kid, raise_error: @raise_error), + expires_at: Time.now.utc + firebase_id_token_certificates.ttl + } + end + + certificate = Thread.current[var_name][:cert] return unless certificate payload = decode_jwt_payload(@jwt_token, certificate.public_key) diff --git a/lib/firebase_id_token/testing/certificates.rb b/lib/firebase_id_token/testing/certificates.rb index eed40fa..2fb1c42 100644 --- a/lib/firebase_id_token/testing/certificates.rb +++ b/lib/firebase_id_token/testing/certificates.rb @@ -80,6 +80,10 @@ def self.read_jwt_file ) ) end + + def self.ttl + 10 + end end end end From 0e9e0f04b180ab17621e57e79643418b1b97bf58 Mon Sep 17 00:00:00 2001 From: Mete Kabak <3997926+metekabak@users.noreply.github.com> Date: Wed, 4 Aug 2021 12:52:39 +0300 Subject: [PATCH 2/3] Update version.rb --- lib/firebase_id_token/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/firebase_id_token/version.rb b/lib/firebase_id_token/version.rb index 6868796..6636ac1 100644 --- a/lib/firebase_id_token/version.rb +++ b/lib/firebase_id_token/version.rb @@ -1,3 +1,3 @@ module FirebaseIdToken - VERSION = '2.4.0' + VERSION = '2.5.0' end From 1aa3bd745cc496a5aa81cc2b2a8cf0c27536bce0 Mon Sep 17 00:00:00 2001 From: Mete Kabak <3997926+metekabak@users.noreply.github.com> Date: Wed, 4 Aug 2021 12:52:58 +0300 Subject: [PATCH 3/3] Update version.rb --- lib/firebase_id_token/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/firebase_id_token/version.rb b/lib/firebase_id_token/version.rb index 6636ac1..174ff8d 100644 --- a/lib/firebase_id_token/version.rb +++ b/lib/firebase_id_token/version.rb @@ -1,3 +1,3 @@ module FirebaseIdToken - VERSION = '2.5.0' + VERSION = '2.5.1' end