Updating SSL settings & configuration for the LTI plugin.

This commit is contained in:
Chris Scribner
2011-11-06 20:42:03 -05:00
parent 55e89adf4d
commit d8d0412168
7 changed files with 151 additions and 28 deletions
+6 -3
View File
@@ -68,7 +68,6 @@ class mod_lti_edit_types_form extends moodleform{
$mform->addElement('text', 'lti_toolurl', get_string('toolurl', 'lti'), array('size'=>'64'));
$mform->setType('lti_toolurl', PARAM_TEXT);
$mform->addHelpButton('lti_toolurl', 'toolurl', 'lti');
$mform->addRule('lti_toolurl', null, 'required', null, 'client');
$mform->addElement('text', 'lti_resourcekey', get_string('resourcekey_admin', 'lti'));
@@ -130,6 +129,10 @@ class mod_lti_edit_types_form extends moodleform{
$mform->setDefault('lti_allowroster', '2');
$mform->addHelpButton('lti_allowroster', 'share_roster_admin', 'lti');
$mform->addElement('checkbox', 'lti_forcessl',' ', ' ' . get_string('force_ssl', 'lti'), $options);
$mform->setDefault('lti_forcessl', '0');
$mform->addHelpButton('lti_forcessl', 'force_ssl', 'lti');
if(!empty($this->_customdata->isadmin)){
//-------------------------------------------------------------------------------
@@ -143,11 +146,11 @@ class mod_lti_edit_types_form extends moodleform{
$mform->addElement('text', 'lti_organizationid', get_string('organizationid', 'lti'));
$mform->setType('lti_organizationid', PARAM_TEXT);
// $mform->addHelpButton('lti_organizationid', 'organizationid', 'lti');
$mform->addHelpButton('lti_organizationid', 'organizationid', 'lti');
$mform->addElement('text', 'lti_organizationurl', get_string('organizationurl', 'lti'));
$mform->setType('lti_organizationurl', PARAM_TEXT);
// $mform->addHelpButton('lti_organizationurl', 'organizationurl', 'lti');
$mform->addHelpButton('lti_organizationurl', 'organizationurl', 'lti');
}
/* Suppress this for now - Chuck
+42
View File
@@ -189,12 +189,15 @@ $string['no_lti_configured'] = 'There are no active External Tools configured.';
$string['no_lti_pending'] = 'There are no pending External Tools.';
$string['no_lti_rejected'] = 'There are no rejected External Tools.';
$string['accept_grades_admin'] = 'Accept grades from the tool';
$string['force_ssl'] = 'Force SSL';
$string['lti_administration'] = 'LTI Administration';
//New instructor strings
$string['display_name'] = 'Display activity name when launched';
$string['display_description'] = 'Display activity description when launched';
$string['external_tool_type'] = 'External tool type';
$string['launch_url'] = 'Launch URL';
$string['secure_launch_url'] = 'Secure Launch URL';
$string['share_name'] = 'Share launcher\'s name with the tool';
$string['share_email'] = 'Share launcher\'s email with the tool';
$string['accept_grades'] = 'Accept grades from the tool';
@@ -216,6 +219,7 @@ $string['custom_config'] = 'Using custom tool configuration.';
$string['tool_config_not_found'] = 'Tool configuration not found for this URL.';
$string['icon_url'] = 'Icon URL';
$string['secure_icon_url'] = 'Secure Icon URL';
$string['return_to_course'] = 'Click <a href="{$a->link}" target="_top">here</a> to return to the course.';
@@ -293,6 +297,24 @@ If you have selected a specific tool type, you may not need to enter a Launch UR
into the tool provider's system, and not go to a specific resource, this will likely be the case.
HTML;
$string['secure_launch_url_help'] = <<<HTML
Similar to Launch URL, but used instead of the launch url if high security is required. Moodle will use the
secure launch URL instead of the launch URL if the Moodle site is accessed through SSL, or if the tool configuration
is set to always launch through SSL.
The Launch URL may also be set to an https address to force launching through SSL, and this field may be left blank.
HTML;
$string['icon_url_help'] = <<<HTML
The icon URL allows the icon that shows up in the course listing for this activity to be modified. Instead of using the default
LTI icon, an icon which conveys the type of activity may be specified.
HTML;
$string['secure_icon_url_help'] = <<<HTML
Similar to the icon URL, but used if the user accessing Moodle securely through SSL. The main purpose for this field is to prevent
the browser from warning the user if the underlying page was accessed over SSL, but requesting to show an unsecure image.
HTML;
$string['launchinpopup_help'] = <<<HTML
The launch container affects the display of the tool when launched from the course. Some launch containers provide more screen
real estate to the tool, and others provide a more integrated feel with the Moodle environemnt.
@@ -579,3 +601,23 @@ External tools differ from URL resources in a few ways:
</li>
</ul>
HTML;
$string['force_ssl_help'] = <<<HTML
Selecting this option forces all launches to this tool provider to use SSL.
In addition, all web service requests from the tool provider will use SSL.
If using this option, confirm that this Moodle site and the tool provider support SSL.
HTML;
$string['organizationid_help'] = <<<HTML
A unique identifier for this Moodle instance. Typically, the DNS name of the organization is used.
If this field is left blank, the host name of this Moodle site will be used as the default value.
HTML;
$string['organizationurl_help'] = <<<HTML
The base URL of this Moodle instance.
If this field is left blank, a default value will be used based on the site configuration.
HTML;
+9 -3
View File
@@ -166,12 +166,18 @@ function lti_delete_instance($id) {
function lti_get_coursemodule_info($coursemodule){
global $DB;
$lti = $DB->get_record('lti', array('id' => $coursemodule->instance), 'icon');
$lti = $DB->get_record('lti', array('id' => $coursemodule->instance), 'icon, secureicon');
$info = new stdClass();
if(!empty($lti->icon)){
$info->icon = $lti->icon;
//We want to use the right icon based on whether the current page is being requested over http or https.
//There's a potential problem here as the icon URLs are cached in the modinfo field and won't be updated for each request.
if(lti_request_is_using_ssl() && !empty($lti->secureicon)){
$info->icon = $lti->secureicon;
} else {
if(!empty($lti->icon)){
$info->icon = $lti->icon;
}
}
return $info;
+65 -12
View File
@@ -98,6 +98,7 @@ function lti_view($instance) {
$typeconfig['customparameters'] = $instance->instructorcustomparameters;
$typeconfig['acceptgrades'] = $instance->instructorchoiceacceptgrades;
$typeconfig['allowroster'] = $instance->instructorchoiceallowroster;
$typeconfig['forcessl'] = '0';
}
//Default the organizationid if not specified
@@ -124,17 +125,28 @@ function lti_view($instance) {
}
$endpoint = !empty($instance->toolurl) ? $instance->toolurl : $typeconfig['toolurl'];
$endpiont = trim($endpoint);
$endpoint = trim($endpoint);
$orgid = $typeconfig['organizationid'];
/* Suppress this for now - Chuck
$orgdesc = $typeconfig['organizationdescr'];
*/
if(!strstr($endpoint, '://')){
$endpoint = 'http://' . $endpoint;
//If the current request is using SSL and a secure tool URL is specified, use it
if(lti_request_is_using_ssl() && !empty($instance->securetoolurl)){
$endpoint = trim($instance->securetoolurl);
}
//If SSL is forced, use the secure tool url if specified. Otherwise, make sure https is on the normal launch URL.
if($typeconfig['forcessl'] == '1'){
if(!empty($instance->securetoolurl)){
$endpoint = trim($instance->securetoolurl);
}
$endpoint = lti_ensure_url_is_https($endpoint);
} else {
if(!strstr($endpoint, '://')){
$endpoint = 'http://' . $endpoint;
}
}
$orgid = $typeconfig['organizationid'];
$course = $PAGE->course;
$requestparams = lti_build_request($instance, $typeconfig, $course);
@@ -150,7 +162,13 @@ function lti_view($instance) {
//Add the return URL. We send the launch container along to help us avoid frames-within-frames when the user returns
$url = new moodle_url('/mod/lti/return.php', $returnurlparams);
$requestparams['launch_presentation_return_url'] = $url->out(false);
$returnurl = $url->out(false);
if($typeconfig['forcessl'] == '1'){
$returnurl = lti_ensure_url_is_https($returnurl);
}
$requestparams['launch_presentation_return_url'] = $returnurl;
}
if(!empty($key) && !empty($secret)){
@@ -234,7 +252,13 @@ function lti_build_request($instance, $typeconfig, $course) {
( $typeconfig['acceptgrades'] == LTI_SETTING_ALWAYS ||
( $typeconfig['acceptgrades'] == LTI_SETTING_DELEGATE && $instance->instructorchoiceacceptgrades == LTI_SETTING_ALWAYS ) ) ) {
$requestparams["lis_result_sourcedid"] = $sourcedid;
$requestparams["ext_ims_lis_basic_outcome_url"] = $CFG->wwwroot.'/mod/lti/service.php';
$serviceurl = $CFG->wwwroot . '/mod/lti/service.php';
if($typeconfig['forcessl'] == '1'){
$serviceurl = lti_ensure_url_is_https($serviceurl);
}
$requestparams["ext_ims_lis_basic_outcome_url"] = $serviceurl;
}
/*if ( isset($placementsecret) &&
@@ -605,8 +629,12 @@ function lti_get_url_thumbprint($url){
$urlparts['path'] = '';
}
if(substr($urlparts['host'], 0, 3) === 'www'){
$urllparts['host'] = substr($urlparts['host'], 3);
if(!isset($urlparts['host'])){
$urlparts['host'] = '';
}
if(substr($urlparts['host'], 0, 4) === 'www.'){
$urlparts['host'] = substr($urlparts['host'], 4);
}
return $urllower = $urlparts['host'] . '/' . $urlparts['path'];
@@ -859,6 +887,10 @@ function lti_get_type_type_config($id) {
$type->lti_customparameters = $config['customparameters'];
}
if(isset($config['forcessl'])){
$type->lti_forcessl = $config['forcessl'];
}
if (isset($config['organizationid'])) {
$type->lti_organizationid = $config['organizationid'];
}
@@ -895,6 +927,9 @@ function lti_prepare_type_for_save($type, $config){
$type->coursevisible = !empty($config->lti_coursevisible) ? $config->lti_coursevisible : 0;
$config->lti_coursevisible = $type->coursevisible;
$type->forcessl = !empty($config->lti_forcessl) ? $config->lti_forcessl : 0;
$config->lti_forcessl = $type->forcessl;
$type->timemodified = time();
unset ($config->lti_typename);
@@ -1138,4 +1173,22 @@ function lti_get_launch_container($lti, $toolconfig){
}
return $launchcontainer;
}
function lti_request_is_using_ssl() {
global $ME;
return (stripos($ME, 'https://') === 0);
}
function lti_ensure_url_is_https($url){
if(!strstr($url, '://')){
$url = 'https://' . $url;
} else {
//If the URL starts with http, replace with https
if(stripos($url, 'http://') === 0){
$url = 'https://' . substr($url, 8);
}
}
return $url;
}
+15 -7
View File
@@ -16,9 +16,14 @@
this.addOptGroups();
var updateToolMatches = function(){
self.updateAutomaticToolMatch(Y.one('#id_toolurl'));
self.updateAutomaticToolMatch(Y.one('#id_securetoolurl'));
};
var typeSelector = Y.one('#id_typeid');
typeSelector.on('change', function(e){
self.updateAutomaticToolMatch();
updateToolMatches();
self.toggleEditButtons();
});
@@ -29,6 +34,7 @@
var textAreas = new Y.NodeList([
Y.one('#id_toolurl'),
Y.one('#id_securetoolurl'),
Y.one('#id_resourcekey'),
Y.one('#id_password')
]);
@@ -39,27 +45,29 @@
//If no more changes within 2 seconds, look up the matching tool URL
debounce = setTimeout(function(){
self.updateAutomaticToolMatch();
updateToolMatches();
}, 2000);
});
self.updateAutomaticToolMatch();
updateToolMatches();
},
clearToolCache: function(){
this.urlCache = {};
},
updateAutomaticToolMatch: function(){
updateAutomaticToolMatch: function(field){
var self = this;
var toolurl = Y.one('#id_toolurl');
var toolurl = field;
var typeSelector = Y.one('#id_typeid');
var automatchToolDisplay = Y.one('#lti_automatch_tool');
var id = field.get('id') + '_lti_automatch_tool';
var automatchToolDisplay = Y.one('#' + id);
if(!automatchToolDisplay){
automatchToolDisplay = Y.Node.create('<span />')
.set('id', 'lti_automatch_tool')
.set('id', id)
.setStyle('padding-left', '1em');
toolurl.insert(automatchToolDisplay, 'after');
+12 -1
View File
@@ -97,6 +97,11 @@ class mod_lti_mod_form extends moodleform_mod {
$mform->setType('toolurl', PARAM_TEXT);
$mform->addHelpButton('toolurl', 'launch_url', 'lti');
$mform->addElement('text', 'securetoolurl', get_string('secure_launch_url', 'lti'), array('size'=>'64'));
$mform->setType('securetoolurl', PARAM_TEXT);
$mform->setAdvanced('securetoolurl');
$mform->addHelpButton('securetoolurl', 'secure_launch_url', 'lti');
$launchoptions=array();
$launchoptions[LTI_LAUNCH_CONTAINER_DEFAULT] = get_string('default', 'lti');
$launchoptions[LTI_LAUNCH_CONTAINER_EMBED] = get_string('embed', 'lti');
@@ -125,7 +130,12 @@ class mod_lti_mod_form extends moodleform_mod {
$mform->addElement('text', 'icon', get_string('icon_url', 'lti'), array('size'=>'64'));
$mform->setType('icon', PARAM_TEXT);
$mform->setAdvanced('icon');
//$mform->addHelpButton('icon', 'icon', 'lti');
$mform->addHelpButton('icon', 'icon_url', 'lti');
$mform->addElement('text', 'secureicon', get_string('secure_icon_url', 'lti'), array('size'=>'64'));
$mform->setType('secureicon', PARAM_TEXT);
$mform->setAdvanced('secureicon');
$mform->addHelpButton('secureicon', 'secure_icon_url', 'lti');
//-------------------------------------------------------------------------------
// Add privacy preferences fieldset where users choose whether to send their data
@@ -217,6 +227,7 @@ class mod_lti_mod_form extends moodleform_mod {
function definition_after_data() {
parent::definition_after_data();
//$mform =& $this->_form;
}
/**
+2 -2
View File
@@ -125,7 +125,7 @@ if (empty($SITE->fullname)) {
$PAGE->set_title($settingspage->visiblename);
$PAGE->set_heading($settingspage->visiblename);
$PAGE->navbar->add('Basic LTI Administration', $CFG->wwwroot.'/admin/settings.php?section=modsettinglti');
$PAGE->navbar->add(get_string('lti_administration', 'lti'), $CFG->wwwroot.'/admin/settings.php?section=modsettinglti');
echo $OUTPUT->header();
@@ -168,7 +168,7 @@ if (empty($SITE->fullname)) {
$PAGE->set_title("$SITE->shortname: " . get_string('toolsetup', 'lti'));
$PAGE->navbar->add('Basic LTI Administration', $CFG->wwwroot.'/admin/settings.php?section=modsettinglti');
$PAGE->navbar->add(get_string('lti_administration', 'lti'), $CFG->wwwroot.'/admin/settings.php?section=modsettinglti');
echo $OUTPUT->header();