Accessing LTI services from OpenACS
The package xooauth supports the use of OpenACS as “Tool Consumer” via LTI. This integration is in regular use at WU for integrating BigBlueButton, Zoom and Jupyter inside the learning platform of the university.
The package implements Basic LTI which is a common denominator for most LTI „Tool Providers“. This package can be used to launch requests from a community (learning) environment (e.g. OpenACS, DotLRN) to some external service (Tool provider) via plain HTTP calls. The service is typically used via an iframe or via window (LTI property “presentation_document_target”).
The LTI interface requires in a first step to register the external tool by providing the following information
- launch_url: URL to which the LTI Launch request is to be sent
- oauth_consumer_key: identifies which application is making the request
- shared_secret: key used for singing the request
In general, this information can be provided via the OpenACS configuration file, or it can be be programmatically hardwired in a web-page via calls to the provided API. The relevant section in the configuration OpenACS configuration file might look like the following:
ns_section ns/server/$server/lti { # # Common information for the tool consumer instance # ns_param tool_consumer_info_product_family_code "LEARN" ns_param tool_consumer_instance_guid "learn.wu.ac.at" ns_param tool_consumer_instance_name "WU Wien" } ns_section ns/server/$server/lti/bbb { ns_param launch_url "https://demo.bigbluebutton.org/lti/rooms/messages/blti" ns_param oauth_consumer_key "bbb" ns_param shared_secret "..." }
Once this is configured, one can create a launch button e.g. in an xowiki page via the includelet "launch-bigbluebutton" like in the following example
Join Online Session via BigBlueButton: {{launch-bigbluebutton}}
When the interface should be used outside the xowiki environment, one can use the API like in the following example:
# # Create LTI object # set lti [::xo::lti::LTI new \ -launch_url https://demo.bigbluebutton.org/lti/rooms/messages/blti \ -oauth_consumer_key "bbb" \ -shared_secret "..." ] set d [$lti form_render] $lti destroy # # Render the form button # set HTML [subst { <button class="btn btn-primary" title="Click to join" type="submit" form="[dict get $d form_name]">Join Meeting</button> [dict get $d HTML] }]
First an LTI object is created, based on the three essential parameters described above, A call to "form_render" returns a dict containing the HTML form and form names. The last command provides the markup for a launch button with a bootstrap styling.
The xooauth package provided pre-configured subclasses of ::xo::lti::LTI for big blue button (::xo::lti::BBB), Zoom (::xo::lti::Zoom) and Jupyter (::xo::lti::Jupyter). These subclasses will pick up the configured parameters from the configuration file and provide means for application specific configurations.