LtiProvider
LtiProvider is a mountable engine for handling the LTI launch and exposing LTI parameters in your rails app.
Installation
Add the gem to your Gemfile with the following line, and then bundle install
gem 'lti_provider_engine', :require => 'lti_provider'
Then, mount the engine to your app by adding this line to your routes.rb file
mount LtiProvider::Engine => "/"
Next, include the engine in your ApplicationController
class ApplicationController < ActionController::Base
  include LtiProvider::LtiApplication
  
  ...
end
After that, create lti.yml and lti_xml.yml files in your config/ folder that looks something
like this:
lti.yml
default: &default
  key: your_key
  secret: your_secret
  require_canvas: true
development:
  <<: *default
test:
  <<: *default
production:
  <<: *default
You'll need the values of key and secret when you configure your lti app on
the tool consumer side.
lti_xml.yml
default: &default
  tool_title: 'Dummy App'
  tool_description: 'A very handy dummy application for testing LtiProvider engine integration.'
  tool_id: 'dummy'
  privacy_level: 'public'
  account_navigation:
    text: 'Dummy'
    visibility: 'admins'
  course_navigation:
    text: 'Dummy'
    visibility: 'admins'
development:
  <<: *default
test:
  <<: *default
production:
  <<: *default
These values are used in the /configure.xml endpoint.
Finally, run migrations:
bundle install
bundle exec rake railties:install:migrations
bundle exec rake db:migrate
This will create the lti_provider_launches table which stores parameters
temporarily through a cookie test redirect.  It is transient data.  It can be
accessed from your main application as LtiProvider::Launch
Usage
The engine exposes a few urls from the mount point:
- /cookie_test
- /consume_launch
- /launch
- /configure.xml
Mostly, you don't have to worry about these, they are used to route through the
lti launch.  However, /configure.xml can be useful in configuring the app on
the tool consumer side.  Right now it is hardcoded to 'Course Navigation' and
'Account navigation' apps.
The engine sets up a global before_filter, requiring your app to be launched
through lti.  It handles receiving the request, verifying it, and exposing
certain config variables sent with the launch parameters. Specifically, it
exposes the following methods to your controllers:
- canvas_url
- user_id
- current_course_id
- tool_consumer_instance_guid
- current_account_id
- course_launch?
- account_launch?
Configuring the Tool Consumer
You will need key and secret from your lti.yml file, and you can find
configuration xml (or at least a starting point) at
<engine-mount-point>/configure.xml
Example
You can see and interact with an example of an app using this engine by looking
at spec/dummy.  This is a full rails app which integrates the gem and has
a simple index page that says 'Hello LTI' if the app is launched through LTI.
About LTI
Interested in learning more about LTI? Here are some links to get you started:
Contributing
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request