class GooglePublicCert
Fetches and decodes public certificates from google
Constants
- CERT_URL
This url is from the Google instructions, firebase.google.com/docs/auth/admin/verify-id-tokens
Public Class Methods
new()
click to toggle source
# File lib/google_public_cert.rb, line 14 def initialize fetch_google_public_key end
Public Instance Methods
keys()
click to toggle source
# File lib/google_public_cert.rb, line 18 def keys fetch_google_public_key if @expires < Time.now.utc @keys end
Private Instance Methods
fetch_google_public_key()
click to toggle source
# File lib/google_public_cert.rb, line 23 def fetch_google_public_key request = Net::HTTP.get_response(URI(CERT_URL)) generate_keys(request) generate_key_expiry(request) end
generate_key_expiry(request)
click to toggle source
# File lib/google_public_cert.rb, line 42 def generate_key_expiry(request) headers = /max-age=\d+/.match(request.header['cache-control'].to_s).to_s @expires = if headers.present? Time.new(headers.split('max-age=')[1].to_i).utc else Time.now.utc end end
generate_keys(request)
click to toggle source
# File lib/google_public_cert.rb, line 29 def generate_keys(request) @keys = { keys: (JSON.parse request.body).map do |key, value| JWT::JWK .new(OpenSSL::X509::Certificate.new(value).public_key) .export .merge(kid: key) end } rescue JSON::ParserError @keys = {} end