class AtPay::Token::Encoder
Public Instance Methods
email()
click to toggle source
# File lib/atpay/token/encoder.rb, line 11 def email version_and_encode(nonce, partner_frame, body_frame) end
site(remote_addr, headers)
click to toggle source
# File lib/atpay/token/encoder.rb, line 15 def site(remote_addr, headers) version_and_encode(nonce, partner_frame, site_frame(remote_addr, headers), body_frame) end
Private Instance Methods
body_frame()
click to toggle source
# File lib/atpay/token/encoder.rb, line 46 def body_frame boxer.box(nonce, crypted_frame) end
boxer()
click to toggle source
# File lib/atpay/token/encoder.rb, line 76 def boxer RbNaCl::Box.new(session.atpay_public_key, Base64.decode64(session.private_key)) end
crypted_frame()
click to toggle source
# File lib/atpay/token/encoder.rb, line 50 def crypted_frame unless user_data.blank? user_data.force_encoding('ASCII-8BIT') end [target_tag, options_group, '/', options_frame.force_encoding('ASCII-8BIT'), '/', user_data].flatten.compact.join end
nonce()
click to toggle source
# File lib/atpay/token/encoder.rb, line 80 def nonce @nonce ||= SecureRandom.random_bytes(24) end
options_frame()
click to toggle source
# File lib/atpay/token/encoder.rb, line 58 def options_frame [amount, expires].pack("g l>") end
options_group()
click to toggle source
# File lib/atpay/token/encoder.rb, line 62 def options_group ":#{group || SecureRandom.hex(5)}" end
partner_frame()
click to toggle source
# File lib/atpay/token/encoder.rb, line 42 def partner_frame [session.partner_id].pack("Q>") end
site_frame(remote_addr, headers)
click to toggle source
# File lib/atpay/token/encoder.rb, line 30 def site_frame(remote_addr, headers) message = boxer.box(nonce, Digest::SHA1.hexdigest([ headers["HTTP_USER_AGENT"], headers["HTTP_ACCEPT_LANGUAGE"], headers["HTTP_ACCEPT_CHARSET"], remote_addr ].join)) [[message.length].pack("l>"), message, [remote_addr.length].pack("l>"), remote_addr].join end
target_tag()
click to toggle source
# File lib/atpay/token/encoder.rb, line 66 def target_tag if target.is_a? EmailAddress "email<#{target.address}>" elsif target.is_a? Card "card<#{target.token}>" else "url<#{self.url}>" end end
version_and_encode(*frames)
click to toggle source
# File lib/atpay/token/encoder.rb, line 20 def version_and_encode(*frames) "@#{version_tag}#{Base64.urlsafe_encode64(frames.join)}@" ensure @nonce = nil end
version_tag()
click to toggle source
# File lib/atpay/token/encoder.rb, line 26 def version_tag version ? (Base64.urlsafe_encode64([version].pack("Q>")) + '~') : nil end