54 lines
1.3 KiB
Ruby
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 |