jam-cloud/ruby/lib/jam_ruby/lib/desk_multipass.rb

54 lines
1.3 KiB
Ruby

require 'openssl'
require 'digest/sha1'
require 'base64'
require 'cgi'
require 'time'
require 'json'
module JamRuby
# Most of the code below was taken from the example located here:
# https://github.com/assistly/multipass-examples/blob/master/ruby.rb
class DeskMultipass
def initialize(user)
@user = user
generate_token_and_signature
end
def token
@token
end
def signature
@signature
end
private
def generate_token_and_signature
key = Digest::SHA1.digest(APP_CONFIG.desk_multipass_key + APP_CONFIG.desk_multipass_site)[0...16]
# Generate a random 16 byte IV
iv = OpenSSL::Random.random_bytes(16)
json = JSON.generate(
:uid => @user.id,
:expires => (Time.now + 300).iso8601,
:customer_name => @user.name,
:customer_email => @user.email)
cipher = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
cipher.encrypt
cipher.key = key
cipher.iv = iv
encrypted = cipher.update(json) + cipher.final
prepended = iv + encrypted
token = Base64.encode64(prepended)
signature = Base64.encode64(OpenSSL::HMAC.digest('sha1', APP_CONFIG.desk_multipass_key, token))
@token = CGI.escape(token)
@signature = CGI.escape(signature)
end
end
end