MDL-68384 mod_lti: fix spec violations bo claim name and dl value type

This commit is contained in:
Claude Vervoort 2020-08-18 09:40:18 -04:00
parent 5486b031ee
commit 7263f2855d
3 changed files with 34 additions and 21 deletions

View file

@ -126,7 +126,8 @@ function lti_get_jwt_claim_mapping() {
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'accept_copy_advice', 'claim' => 'accept_copy_advice',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'accept_media_types' => [ 'accept_media_types' => [
'suffix' => 'dl', 'suffix' => 'dl',
@ -138,7 +139,8 @@ function lti_get_jwt_claim_mapping() {
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'accept_multiple', 'claim' => 'accept_multiple',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'accept_presentation_document_targets' => [ 'accept_presentation_document_targets' => [
'suffix' => 'dl', 'suffix' => 'dl',
@ -156,19 +158,22 @@ function lti_get_jwt_claim_mapping() {
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'accept_unsigned', 'claim' => 'accept_unsigned',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'auto_create' => [ 'auto_create' => [
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'auto_create', 'claim' => 'auto_create',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'can_confirm' => [ 'can_confirm' => [
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'can_confirm', 'claim' => 'can_confirm',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'content_item_return_url' => [ 'content_item_return_url' => [
'suffix' => 'dl', 'suffix' => 'dl',
@ -389,7 +394,7 @@ function lti_get_jwt_claim_mapping() {
'tool_consumer_info_product_family_code' => [ 'tool_consumer_info_product_family_code' => [
'suffix' => '', 'suffix' => '',
'group' => 'tool_platform', 'group' => 'tool_platform',
'claim' => 'family_code', 'claim' => 'product_family_code',
'isarray' => false 'isarray' => false
], ],
'tool_consumer_info_version' => [ 'tool_consumer_info_version' => [
@ -483,14 +488,14 @@ function lti_get_jwt_claim_mapping() {
'isarray' => false 'isarray' => false
], ],
'lis_outcome_service_url' => [ 'lis_outcome_service_url' => [
'suffix' => 'bos', 'suffix' => 'bo',
'group' => 'basicoutcomesservice', 'group' => 'basicoutcome',
'claim' => 'lis_outcome_service_url', 'claim' => 'lis_outcome_service_url',
'isarray' => false 'isarray' => false
], ],
'lis_result_sourcedid' => [ 'lis_result_sourcedid' => [
'suffix' => 'bos', 'suffix' => 'bo',
'group' => 'basicoutcomesservice', 'group' => 'basicoutcome',
'claim' => 'lis_result_sourcedid', 'claim' => 'lis_result_sourcedid',
'isarray' => false 'isarray' => false
], ],
@ -3192,9 +3197,12 @@ function lti_sign_jwt($parms, $endpoint, $oauthconsumerkey, $typeid = 0, $nonce
$claim = LTI_JWT_CLAIM_PREFIX; $claim = LTI_JWT_CLAIM_PREFIX;
if (array_key_exists($key, $claimmapping)) { if (array_key_exists($key, $claimmapping)) {
$mapping = $claimmapping[$key]; $mapping = $claimmapping[$key];
$type = $mapping["type"] ?? "string";
if ($mapping['isarray']) { if ($mapping['isarray']) {
$value = explode(',', $value); $value = explode(',', $value);
sort($value); sort($value);
} else if ($type == 'boolean') {
$value = isset($value) && ($value == 'true');
} }
if (!empty($mapping['suffix'])) { if (!empty($mapping['suffix'])) {
$claim .= "-{$mapping['suffix']}"; $claim .= "-{$mapping['suffix']}";

View file

@ -447,7 +447,7 @@ class memberships extends \mod_lti\local\ltiservice\service_base {
$serviceurl = lti_ensure_url_is_https($serviceurl); $serviceurl = lti_ensure_url_is_https($serviceurl);
} }
$basicoutcome->lis_outcome_service_url = $serviceurl; $basicoutcome->lis_outcome_service_url = $serviceurl;
$message->{'https://purl.imsglobal.org/spec/lti-bos/claim/basicoutcomesservice'} = $basicoutcome; $message->{'https://purl.imsglobal.org/spec/lti-bo/claim/basicoutcome'} = $basicoutcome;
} }
$member->message = [$message]; $member->message = [$message];
} }

View file

@ -627,7 +627,8 @@ class mod_lti_locallib_testcase extends advanced_testcase {
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'accept_copy_advice', 'claim' => 'accept_copy_advice',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'accept_media_types' => [ 'accept_media_types' => [
'suffix' => 'dl', 'suffix' => 'dl',
@ -639,7 +640,8 @@ class mod_lti_locallib_testcase extends advanced_testcase {
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'accept_multiple', 'claim' => 'accept_multiple',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'accept_presentation_document_targets' => [ 'accept_presentation_document_targets' => [
'suffix' => 'dl', 'suffix' => 'dl',
@ -657,19 +659,22 @@ class mod_lti_locallib_testcase extends advanced_testcase {
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'accept_unsigned', 'claim' => 'accept_unsigned',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'auto_create' => [ 'auto_create' => [
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'auto_create', 'claim' => 'auto_create',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'can_confirm' => [ 'can_confirm' => [
'suffix' => 'dl', 'suffix' => 'dl',
'group' => 'deep_linking_settings', 'group' => 'deep_linking_settings',
'claim' => 'can_confirm', 'claim' => 'can_confirm',
'isarray' => false 'isarray' => false,
'type' => 'boolean'
], ],
'content_item_return_url' => [ 'content_item_return_url' => [
'suffix' => 'dl', 'suffix' => 'dl',
@ -890,7 +895,7 @@ class mod_lti_locallib_testcase extends advanced_testcase {
'tool_consumer_info_product_family_code' => [ 'tool_consumer_info_product_family_code' => [
'suffix' => '', 'suffix' => '',
'group' => 'tool_platform', 'group' => 'tool_platform',
'claim' => 'family_code', 'claim' => 'product_family_code',
'isarray' => false 'isarray' => false
], ],
'tool_consumer_info_version' => [ 'tool_consumer_info_version' => [
@ -984,14 +989,14 @@ class mod_lti_locallib_testcase extends advanced_testcase {
'isarray' => false 'isarray' => false
], ],
'lis_outcome_service_url' => [ 'lis_outcome_service_url' => [
'suffix' => 'bos', 'suffix' => 'bo',
'group' => 'basicoutcomesservice', 'group' => 'basicoutcome',
'claim' => 'lis_outcome_service_url', 'claim' => 'lis_outcome_service_url',
'isarray' => false 'isarray' => false
], ],
'lis_result_sourcedid' => [ 'lis_result_sourcedid' => [
'suffix' => 'bos', 'suffix' => 'bo',
'group' => 'basicoutcomesservice', 'group' => 'basicoutcome',
'claim' => 'lis_result_sourcedid', 'claim' => 'lis_result_sourcedid',
'isarray' => false 'isarray' => false
], ],