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