class Lightrail::ShopperTokenFactory
Public Class Methods
generate(contactId, options=nil)
click to toggle source
# File lib/lightrail_client/shopper_token_factory.rb, line 3 def self.generate (contactId, options=nil) raise Lightrail::BadParameterError.new("Lightrail::api_key is not set") unless Lightrail::api_key raise Lightrail::BadParameterError.new("Lightrail::shared_secret is not set") unless Lightrail::shared_secret raise Lightrail::BadParameterError.new("Must provide a contactId to generate a shopper token") unless contactId g = {} validity_in_seconds = 43200 metadata = nil if !options # no-op elsif options.is_a?(Numeric) # support for legacy code when options was validity_in_seconds validity_in_seconds = options elsif options.is_a?(Hash) if options.has_key?(:validity_in_seconds) validity_in_seconds = options[:validity_in_seconds] end if options.has_key?(:metadata) metadata = options[:metadata] end end if validity_in_seconds <= 0 raise Lightrail::LightrailArgumentError.new("validity_in_seconds must be > 0") end payload = Lightrail::api_key.split('.') payload = JSON.parse(Base64.decode64(payload[1])) g['gui'] = payload['g']['gui'] g['gmi'] = payload['g']['gmi'] g['coi'] = contactId g['tmi'] = payload['g']['tmi'] iat = Time.now.to_i payload = { g: g, iat: iat, exp: iat + validity_in_seconds, iss: "MERCHANT" } if metadata payload["metadata"] = metadata end JWT.encode(payload, Lightrail::shared_secret, 'HS256') end