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