mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
MDL-67072 mod_lti: OIDC additional login parameters
This commit is contained in:
parent
f2fc4a9fa1
commit
9b0b472dd6
2 changed files with 73 additions and 22 deletions
|
@ -3278,7 +3278,44 @@ function lti_post_launch_html($newparms, $endpoint, $debug=false) {
|
||||||
*/
|
*/
|
||||||
function lti_initiate_login($courseid, $id, $instance, $config, $messagetype = 'basic-lti-launch-request', $title = '',
|
function lti_initiate_login($courseid, $id, $instance, $config, $messagetype = 'basic-lti-launch-request', $title = '',
|
||||||
$text = '') {
|
$text = '') {
|
||||||
global $SESSION, $USER, $CFG;
|
global $SESSION;
|
||||||
|
|
||||||
|
$params = lti_build_login_request($courseid, $id, $instance, $config, $messagetype);
|
||||||
|
$SESSION->lti_message_hint = "{$courseid},{$config->typeid},{$id}," . base64_encode($title) . ',' .
|
||||||
|
base64_encode($text);
|
||||||
|
|
||||||
|
$r = "<form action=\"" . $config->lti_initiatelogin .
|
||||||
|
"\" name=\"ltiInitiateLoginForm\" id=\"ltiInitiateLoginForm\" method=\"post\" " .
|
||||||
|
"encType=\"application/x-www-form-urlencoded\">\n";
|
||||||
|
|
||||||
|
foreach ($params as $key => $value) {
|
||||||
|
$key = htmlspecialchars($key);
|
||||||
|
$value = htmlspecialchars($value);
|
||||||
|
$r .= " <input type=\"hidden\" name=\"{$key}\" value=\"{$value}\"/>\n";
|
||||||
|
}
|
||||||
|
$r .= "</form>\n";
|
||||||
|
|
||||||
|
$r .= "<script type=\"text/javascript\">\n" .
|
||||||
|
"//<![CDATA[\n" .
|
||||||
|
"document.ltiInitiateLoginForm.submit();\n" .
|
||||||
|
"//]]>\n" .
|
||||||
|
"</script>\n";
|
||||||
|
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares an LTI 1.3 login request
|
||||||
|
*
|
||||||
|
* @param int $courseid Course ID
|
||||||
|
* @param int $id LTI instance ID
|
||||||
|
* @param stdClass|null $instance LTI instance
|
||||||
|
* @param stdClass $config Tool type configuration
|
||||||
|
* @param string $messagetype LTI message type
|
||||||
|
* @return array Login request parameters
|
||||||
|
*/
|
||||||
|
function lti_build_login_request($courseid, $id, $instance, $config, $messagetype) {
|
||||||
|
global $USER, $CFG;
|
||||||
|
|
||||||
if (!empty($instance)) {
|
if (!empty($instance)) {
|
||||||
$endpoint = !empty($instance->toolurl) ? $instance->toolurl : $config->lti_toolurl;
|
$endpoint = !empty($instance->toolurl) ? $instance->toolurl : $config->lti_toolurl;
|
||||||
|
@ -3302,27 +3339,9 @@ function lti_initiate_login($courseid, $id, $instance, $config, $messagetype = '
|
||||||
$params['target_link_uri'] = $endpoint;
|
$params['target_link_uri'] = $endpoint;
|
||||||
$params['login_hint'] = $USER->id;
|
$params['login_hint'] = $USER->id;
|
||||||
$params['lti_message_hint'] = $id;
|
$params['lti_message_hint'] = $id;
|
||||||
$SESSION->lti_message_hint = "{$courseid},{$config->typeid},{$id}," . base64_encode($title) . ',' .
|
$params['client_id'] = $config->lti_clientid;
|
||||||
base64_encode($text);
|
$params['lti_deployment_id'] = $config->typeid;
|
||||||
|
return $params;
|
||||||
$r = "<form action=\"" . $config->lti_initiatelogin .
|
|
||||||
"\" name=\"ltiInitiateLoginForm\" id=\"ltiInitiateLoginForm\" method=\"post\" " .
|
|
||||||
"encType=\"application/x-www-form-urlencoded\">\n";
|
|
||||||
|
|
||||||
foreach ($params as $key => $value) {
|
|
||||||
$key = htmlspecialchars($key);
|
|
||||||
$value = htmlspecialchars($value);
|
|
||||||
$r .= " <input type=\"hidden\" name=\"{$key}\" value=\"{$value}\"/>\n";
|
|
||||||
}
|
|
||||||
$r .= "</form>\n";
|
|
||||||
|
|
||||||
$r .= "<script type=\"text/javascript\">\n" .
|
|
||||||
"//<![CDATA[\n" .
|
|
||||||
"document.ltiInitiateLoginForm.submit();\n" .
|
|
||||||
"//]]>\n" .
|
|
||||||
"</script>\n";
|
|
||||||
|
|
||||||
return $r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function lti_get_type($typeid) {
|
function lti_get_type($typeid) {
|
||||||
|
|
|
@ -1383,4 +1383,36 @@ MwIDAQAB
|
||||||
$this->assertEquals($token->timecreated + LTI_ACCESS_TOKEN_LIFE, $token->validuntil);
|
$this->assertEquals($token->timecreated + LTI_ACCESS_TOKEN_LIFE, $token->validuntil);
|
||||||
$this->assertNull($token->lastaccess);
|
$this->assertNull($token->lastaccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test lti_build_login_request().
|
||||||
|
*/
|
||||||
|
public function test_lti_build_login_request() {
|
||||||
|
global $USER, $CFG;
|
||||||
|
|
||||||
|
$this->resetAfterTest();
|
||||||
|
|
||||||
|
$USER->id = 123456789;
|
||||||
|
|
||||||
|
$course = $this->getDataGenerator()->create_course();
|
||||||
|
$instance = $this->getDataGenerator()->create_module('lti',
|
||||||
|
[
|
||||||
|
'course' => $course->id,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$config = new stdClass();
|
||||||
|
$config->lti_clientid = 'some-client-id';
|
||||||
|
$config->typeid = 'some-type-id';
|
||||||
|
$config->lti_toolurl = 'some-lti-tool-url';
|
||||||
|
|
||||||
|
$request = lti_build_login_request($course->id, $instance->id, $instance, $config, 'basic-lti-launch-request');
|
||||||
|
|
||||||
|
$this->assertEquals($CFG->wwwroot, $request['iss']);
|
||||||
|
$this->assertEquals('http://some-lti-tool-url', $request['target_link_uri']);
|
||||||
|
$this->assertEquals(123456789, $request['login_hint']);
|
||||||
|
$this->assertEquals($instance->id, $request['lti_message_hint']);
|
||||||
|
$this->assertEquals('some-client-id', $request['client_id']);
|
||||||
|
$this->assertEquals('some-type-id', $request['lti_deployment_id']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue