Class: SpreeCmCommissioner::FirebaseIdTokenProvider
- Inherits:
-
BaseInteractor
- Object
- BaseInteractor
- SpreeCmCommissioner::FirebaseIdTokenProvider
- Defined in:
- app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb
Instance Method Summary collapse
-
#call ⇒ Object
:id_token.
- #cert_generation(kid) ⇒ Object
- #decode_id_token ⇒ Object
- #extract_provider_params ⇒ Object
- #fetch_cert_key ⇒ Object
- #refresh_fetch_cert_key ⇒ Object
Instance Method Details
#call ⇒ Object
:id_token
4 5 6 7 8 9 10 11 12 13 14 |
# File 'app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb', line 4 def call claim = decode_id_token if claim context.claim = claim context.provider = extract_provider_params else = I18n.t('firebase_id_token.failure') context.fail!(message: ) end end |
#cert_generation(kid) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb', line 57 def cert_generation(kid) json = fetch_cert_key cert = json[kid] if cert.nil? json = refresh_fetch_cert_key cert = json[kid] end cert end |
#decode_id_token ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb', line 45 def decode_id_token result = JWT.decode(id_token, nil, false, { algorithm: 'RS256' }) do |header| kid = header['kid'] cert = cert_generation(kid) public_key = OpenSSL::X509::Certificate.new(cert).public_key public_key end result[0] rescue StandardError => e context.fail!(message: e.) end |
#extract_provider_params ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb', line 82 def extract_provider_params claim = context.claim return nil if claim.nil? provider_name = claim['firebase']['sign_in_provider'] sub = claim['firebase']['identities'][provider_name].first email = claim['email'] name = claim['name'] { identity_type: provider_name.split('.').first, sub: sub, name: name, email: email } end |
#fetch_cert_key ⇒ Object
74 75 76 77 78 79 80 |
# File 'app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb', line 74 def fetch_cert_key Rails.cache.fetch('firebase-cert') do url = URI('https://www.googleapis.com/robot/v1/metadata/x509/[email protected]') content = Net::HTTP.get(url) JSON.parse(content) end end |
#refresh_fetch_cert_key ⇒ Object
69 70 71 72 |
# File 'app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb', line 69 def refresh_fetch_cert_key Rails.cache.delete('firebase-cert') fetch_cert_key end |