Class: SpreeCmCommissioner::CrossAppHandoffTokens::Decode

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/cross_app_handoff_tokens/decode.rb

Instance Method Summary collapse

Instance Method Details

#call(token:, purpose:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/services/spree_cm_commissioner/cross_app_handoff_tokens/decode.rb', line 15

def call(token:, purpose:)
  unverified_payload = JWT.decode(token, nil, false).first
  user = Spree.user_class.find_by(id: unverified_payload['sub'])
  return failure(nil, 'invalid_token') if user.nil?

  payload = JWT.decode(token, user.secure_token, true, algorithm: Encode::ALGORITHM).first
  return failure(nil, 'invalid_purpose') unless payload['purpose'] == purpose.to_s
  return failure(nil, 'invalid_token') unless consume_if_current_version!(user, payload['ver'])

  success(user: user, payload: payload)
rescue JWT::DecodeError
  failure(nil, 'invalid_token')
end