class IMS::LTI::Services::ToolProxyRegistrationService

Public Class Methods

new(registration_request) click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 3
def initialize(registration_request)
  @registration_request = registration_request
end

Public Instance Methods

register_tool_proxy(tool_proxy, reregistration_confirm_url = nil, shared_secret = nil) click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 19
def register_tool_proxy(tool_proxy, reregistration_confirm_url = nil, shared_secret = nil)
  service = tool_consumer_profile.services_offered.find { |s| s.formats.include?('application/vnd.ims.lti.v2.toolproxy+json') && s.actions.include?('POST') }

  SimpleOAuth::Header::ATTRIBUTE_KEYS << :body_hash unless SimpleOAuth::Header::ATTRIBUTE_KEYS.include? :body_hash
  tool_proxy_json = tool_proxy.to_json
  body_hash = Digest::SHA1.base64digest tool_proxy_json

  if reregistration?
    consumer_key = tool_proxy.tool_proxy_guid
    consumer_secret = shared_secret
  else
    consumer_key = @registration_request.reg_key
    consumer_secret = @registration_request.reg_password
  end

  conn = Faraday.new do |conn|
    conn.request :oauth, {:consumer_key => consumer_key, :consumer_secret => consumer_secret, :body_hash => body_hash}
    conn.adapter :net_http
  end

  response = conn.post do |req|
    req.url service.endpoint
    req.headers['Content-Type'] = 'application/vnd.ims.lti.v2.toolproxy+json'
    req.headers['VND-IMS-CONFIRM-URL'] = reregistration_confirm_url if reregistration_confirm_url
    req.body = tool_proxy_json
  end

  if response.status == 201 || (response.status == 200 && reregistration?)
    IMS::LTI::Models::ToolProxy.new.from_json(tool_proxy.to_json).from_json(response.body)
  else
    raise IMS::LTI::Errors::ToolProxyRegistrationError.new(response.status, response.body)
  end
end
remove_invalid_capabilities!(message_handler) click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 54
def remove_invalid_capabilities!(message_handler)
  {
    invalid_capabilities: remove_capabilites!(message_handler),
    invalid_parameters: remove_params!(message_handler)
  }
end
service_profiles() click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 15
def service_profiles
  tool_consumer_profile.services_offered.map(&:profile)
end
tool_consumer_profile() click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 7
def tool_consumer_profile
  return @tool_consumer_profile if @tool_consumer_profile

  connection = Faraday.new
  response = connection.get(@registration_request.tc_profile_url)
  @tool_consumer_profile = IMS::LTI::Models::ToolConsumerProfile.new.from_json(response.body)
end

Private Instance Methods

remove_capabilites!(message_handler) click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 70
def remove_capabilites!(message_handler)
  orig_capabilities = message_handler.enabled_capability || []
  capabilites = orig_capabilities & tool_consumer_profile.capability_offered
  capabilites.reject! { |cap| IMS::LTI::Models::ToolConsumerProfile::MESSAGING_CAPABILITIES.include? cap }
  message_handler.enabled_capability = capabilites
  orig_capabilities - capabilites
end
remove_params!(message_handler) click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 63
def remove_params!(message_handler)
  orig_parameters = message_handler.parameter || []
  parameters = orig_parameters.select {|p| p.fixed? || tool_consumer_profile.capability_offered.include?(p.variable)}
  message_handler.parameter = parameters
  orig_parameters - parameters
end
reregistration?() click to toggle source
# File lib/ims/lti/services/tool_proxy_registration_service.rb, line 78
def reregistration?
  @registration_request.is_a?(IMS::LTI::Models::Messages::ToolProxyUpdateRequest)
end