Skip to content

Instantly share code, notes, and snippets.

@jonsgreen
Created June 21, 2018 17:17
Show Gist options
  • Save jonsgreen/66b0cc467d72c4e3f01dd00ea10b4fb7 to your computer and use it in GitHub Desktop.
Save jonsgreen/66b0cc467d72c4e3f01dd00ea10b4fb7 to your computer and use it in GitHub Desktop.
class GradeCam::Launch
attr_reader :assessment_session, :user, :url
def initialize(assessment_session, user, url)
@assessment_session, @user, @url = assessment_session, user, url
end
def params
@params ||= { context_id: assessment_session.classroom.id,
custom_resource_assignment_id: assessment_session.id,
launch_presentation_document_target: "frame",
launch_presentation_return_url: url,
lti_message_type: "basic-lti-launch-request",
lti_version: "LTI-1p0",
oauth_callback: "about:blank",
oauth_consumer_key: ENV['GRADECAM_OAUTH_KEY'],
oauth_nonce: oauth_nonce,
oauth_signature_method: "HMAC-SHA1",
oauth_timestamp: Time.now.getutc.to_i.to_s,
oauth_version: "1.0",
resource_link_id: "0",
roles: "Instructor",
user_id: user.id,
lis_person_name_given: user.first_name,
lis_person_name_family: user.last_name,
custom_lis_person_contact_email_primary: user.email
}
end
def launch_fields
params.merge(oauth_signature: oauth_signature)
end
def oauth_nonce(size=7)
Base64.encode64(OpenSSL::Random.random_bytes(size)).gsub(/\W/, '')
end
def url_encode(string)
CGI::escape(string)
end
def oauth_signature
encoded_params = params.sort.collect{ |k, v| url_encode("#{k}=#{v}") }.join('%26')
base_string = "POST&#{url_encode(ENV['GRADECAM_LAUNCH_ENDPOINT'])}&#{encoded_params}"
sign("#{ENV['GRADECAM_OAUTH_SECRET']}&#{ENV['GRADECAM_OAUTH_KEY']}", base_string)
end
def sign(key, base_string)
digest = OpenSSL::Digest.new('sha1')
hmac = OpenSSL::HMAC.digest(digest, key, base_string)
Base64.encode64(hmac).chomp.gsub(/\n/, '')
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment