3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/lightrail_client/shopper_token_factory.rb', line 3
def self.generate (contact, validity_in_seconds=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 contact with one of shopper_id, contact_id or user_supplied_id to generate a shopper token") unless (Lightrail::Validator.has_valid_or_empty_shopper_id?(contact) ||
Lightrail::Validator.has_valid_contact_id?(contact) ||
Lightrail::Validator.has_valid_user_supplied_id?(contact))
g = {}
if (Lightrail::Validator.has_valid_or_empty_shopper_id?(contact))
g['shi'] = Lightrail::Validator.get_shopper_id(contact)
elsif (Lightrail::Validator.has_valid_contact_id?(contact))
g['coi'] = Lightrail::Validator.get_contact_id(contact)
elsif (Lightrail::Validator.has_valid_user_supplied_id?(contact))
g['cui'] = Lightrail::Validator.get_user_supplied_id(contact)
end
payload = Lightrail::api_key.split('.')
payload = JSON.parse(Base64.decode64(payload[1]))
g['gui'] = payload['g']['gui']
g['gmi'] = payload['g']['gmi']
iat = Time.now.to_i
payload = {
g: g,
iat: iat,
iss: "MERCHANT"
}
if validity_in_seconds
payload['exp'] = iat + validity_in_seconds
end
JWT.encode(payload, Lightrail::shared_secret, 'HS256')
end
|