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
|