Sha256: ae6cbf261af631ce7fa720d6d74ed134ab1a8e9d0b8b947e663829772ff9c481

Contents?: true

Size: 1.46 KB

Versions: 38

Compression:

Stored size: 1.46 KB

Contents

module NetSuite
  module Passports
    class Token
      attr_reader :account, :consumer_key, :consumer_secret, :token_id, :token_secret

      def initialize(account, consumer_key, consumer_secret, token_id, token_secret)
        @account = account.to_s
        @consumer_key = consumer_key
        @consumer_secret = consumer_secret
        @token_id = token_id
        @token_secret = token_secret
      end

      def passport
        {
          'platformMsgs:tokenPassport' => {
            'platformCore:account' => account,
            'platformCore:consumerKey' => consumer_key,
            'platformCore:token' => token_id,
            'platformCore:nonce' => nonce,
            'platformCore:timestamp' => timestamp,
            'platformCore:signature' => signature,
            :attributes! => { 'platformCore:signature' => { 'algorithm' => 'HMAC-SHA256' } }
          }
        }
      end

      private

      def signature
        Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), signature_key, signature_data))
      end

      def signature_key
        "#{consumer_secret}&#{token_secret}"
      end

      def signature_data
        "#{account}&#{consumer_key}&#{token_id}&#{nonce}&#{timestamp}"
      end

      def nonce
        @nonce ||= Array.new(20) { alphanumerics.sample }.join
      end

      def alphanumerics
        [*'0'..'9',*'A'..'Z',*'a'..'z']
      end

      def timestamp
        @timestamp ||= Time.now.to_i
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
netsuite-0.9.3 lib/netsuite/passports/token.rb
netsuite-0.9.2 lib/netsuite/passports/token.rb
netsuite-0.9.1 lib/netsuite/passports/token.rb
netsuite-0.9.0 lib/netsuite/passports/token.rb
netsuite-0.8.12 lib/netsuite/passports/token.rb
netsuite-0.8.11 lib/netsuite/passports/token.rb
netsuite-0.8.10 lib/netsuite/passports/token.rb
netsuite-0.8.9 lib/netsuite/passports/token.rb
netsuite-0.8.8 lib/netsuite/passports/token.rb
netsuite-0.8.7 lib/netsuite/passports/token.rb
netsuite-0.8.6 lib/netsuite/passports/token.rb
netsuite-0.8.5 lib/netsuite/passports/token.rb
netsuite-0.8.4 lib/netsuite/passports/token.rb
netsuite-0.8.3 lib/netsuite/passports/token.rb
netsuite-0.8.2 lib/netsuite/passports/token.rb
netsuite-0.8.0 lib/netsuite/passports/token.rb
netsuite-0.7.9 lib/netsuite/passports/token.rb
netsuite-0.7.8 lib/netsuite/passports/token.rb
netsuite-0.7.7 lib/netsuite/passports/token.rb
netsuite-0.7.6 lib/netsuite/passports/token.rb