diff --git a/lti/views.py b/lti/views.py index c3496b56..c223016e 100644 --- a/lti/views.py +++ b/lti/views.py @@ -82,7 +82,6 @@ class OIDCLoginView(View): client_id = request.GET.get('client_id') or request.POST.get('client_id') login_hint = request.GET.get('login_hint') or request.POST.get('login_hint') lti_message_hint = request.GET.get('lti_message_hint') or request.POST.get('lti_message_hint') - media_friendly_token = request.GET.get('media_friendly_token') or request.POST.get('media_friendly_token') cmid = request.GET.get('cmid') or request.POST.get('cmid') if not all([target_link_uri, iss, client_id]): @@ -110,10 +109,8 @@ class OIDCLoginView(View): nonce = str(uuid.uuid4()) launch_data = {'target_link_uri': target_link_uri, 'nonce': nonce} - # Store media token and cmid if provided (for filter-based launches) - if media_friendly_token: - launch_data['media_friendly_token'] = media_friendly_token - if cmid: + # Store cmid if provided (including 0 for filter-based launches) + if cmid is not None: launch_data['cmid'] = cmid session_service.save_launch_data(f'state-{state}', launch_data) @@ -138,7 +135,6 @@ class OIDCLoginView(View): # Debug logging for filter launches logger.error(f"[OIDC LOGIN DEBUG] Redirecting to: {redirect_url}") logger.error(f"[OIDC LOGIN DEBUG] Has lti_message_hint: {bool(lti_message_hint)}") - logger.error(f"[OIDC LOGIN DEBUG] Has media_friendly_token: {bool(media_friendly_token)}") logger.error(f"[OIDC LOGIN DEBUG] cmid: {cmid}") return HttpResponseRedirect(redirect_url) @@ -235,32 +231,11 @@ class LaunchView(View): create_lti_session(request, user, message_launch, platform) - # Check for media_friendly_token in custom claims + # Check for media_friendly_token in custom claims (for both deep linking and filter launches) media_token = custom_claims.get('media_friendly_token') - logger.error(f"[LTI LAUNCH DEBUG] media_token from custom_claims: {media_token}") if media_token: logger.error(f"[LTI LAUNCH DEBUG] Found media_friendly_token in custom claims: {media_token}") - # Check if media token was passed via target_link_uri query parameter (from filter launch) - logger.error(f"[LTI LAUNCH DEBUG] About to check target_link_uri, media_token is: {media_token}") - if not media_token: - target_link_uri = launch_data.get('https://purl.imsglobal.org/spec/lti/claim/target_link_uri', '') - logger.error(f"[LTI LAUNCH DEBUG] target_link_uri: {target_link_uri}") - if '?media_token=' in target_link_uri or '&media_token=' in target_link_uri: - from urllib.parse import parse_qs, urlparse - - parsed = urlparse(target_link_uri) - params = parse_qs(parsed.query) - media_token = params.get('media_token', [None])[0] - if media_token: - logger.error(f"[LTI LAUNCH DEBUG] Found media_token in target_link_uri: {media_token}") - - # Store media_token in session for determine_redirect to use - if media_token: - request.session['filter_media_token'] = media_token - request.session.modified = True - logger.error(f"[LTI LAUNCH DEBUG] Stored media_token in session: {media_token}") - LTILaunchLog.objects.create(platform=platform, user=user, resource_link=resource_link_obj, launch_type='resource_link', success=True, claims=claims) redirect_url = self.determine_redirect(launch_data, resource_link_obj) @@ -295,12 +270,9 @@ class LaunchView(View): custom_path = '/' + custom_path return custom_path + # Check custom claims for media token (from both deep linking and filter launches) media_id = custom.get('media_id') or custom.get('media_friendly_token') - # Also check session for media token (from filter-based launches) - if not media_id and hasattr(self, 'request'): - media_id = self.request.session.get('filter_media_token') - if media_id: try: media = Media.objects.get(friendly_token=media_id) diff --git a/moodle-plugins/filter_mediacmslti/launch.php b/moodle-plugins/filter_mediacmslti/launch.php index 3714a43b..39b9d57d 100644 --- a/moodle-plugins/filter_mediacmslti/launch.php +++ b/moodle-plugins/filter_mediacmslti/launch.php @@ -67,30 +67,16 @@ $instance->instructorchoicesendname = 1; $instance->instructorchoicesendemailaddr = 1; $instance->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS; -// Get type config +// Set custom parameters to pass media token (like deep linking does) +// This will be included in the LTI custom claims JWT +$instance->instructorcustomparameters = "media_friendly_token=" . $mediatoken; + +// Get type config (standard tool URL, no modifications needed) $typeconfig = lti_get_type_type_config($ltitoolid); -// Override the tool URL to include media token as query parameter -// This way MediaCMS receives it in the target_link_uri -if (is_array($typeconfig)) { - $baseurl = $typeconfig['toolurl'] ?? $mediacmsurl . '/lti/launch/'; - $typeconfig['toolurl'] = $baseurl . '?media_token=' . urlencode($mediatoken); - if (isset($typeconfig['toolurl_secure'])) { - $baseurl_secure = $typeconfig['toolurl_secure']; - $typeconfig['toolurl_secure'] = $baseurl_secure . '?media_token=' . urlencode($mediatoken); - } -} else { - $baseurl = $typeconfig->toolurl ?? $mediacmsurl . '/lti/launch/'; - $typeconfig->toolurl = $baseurl . '?media_token=' . urlencode($mediatoken); - if (isset($typeconfig->toolurl_secure)) { - $baseurl_secure = $typeconfig->toolurl_secure; - $typeconfig->toolurl_secure = $baseurl_secure . '?media_token=' . urlencode($mediatoken); - } -} - // Use Moodle's LTI launch function to initiate OIDC properly -// Pass null for cmid since we don't have a real course module -$content = lti_initiate_login($course->id, null, $instance, $typeconfig, null, 'MediaCMS video resource'); +// Pass 0 as dummy cmid since we don't have a real course module +$content = lti_initiate_login($course->id, 0, $instance, $typeconfig, null, 'MediaCMS video resource'); echo $OUTPUT->header(); echo $content;