mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-01-20 07:12:58 -05:00
this
This commit is contained in:
@@ -8,14 +8,44 @@ import json
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from django.core.cache import cache
|
||||
from pylti1p3.request import Request
|
||||
from pylti1p3.tool_config import ToolConfAbstract
|
||||
|
||||
|
||||
class DjangoRequest(Request):
|
||||
"""Django request adapter for PyLTI1p3"""
|
||||
|
||||
def __init__(self, request):
|
||||
self._request = request
|
||||
self._cookies = request.COOKIES
|
||||
self._session = request.session
|
||||
|
||||
def get_param(self, key):
|
||||
"""Get parameter from GET or POST"""
|
||||
if self._request.method == 'POST':
|
||||
return self._request.POST.get(key)
|
||||
return self._request.GET.get(key)
|
||||
|
||||
def get_cookie(self, key):
|
||||
"""Get cookie value"""
|
||||
return self._cookies.get(key)
|
||||
|
||||
def is_secure(self):
|
||||
"""Check if request is secure (HTTPS)"""
|
||||
return self._request.is_secure()
|
||||
|
||||
@property
|
||||
def session(self):
|
||||
"""Get session"""
|
||||
return self._session
|
||||
|
||||
|
||||
class DjangoOIDCLogin:
|
||||
"""Handles OIDC login initiation"""
|
||||
|
||||
def __init__(self, request, tool_config, launch_data_storage=None):
|
||||
self.request = request
|
||||
self.lti_request = DjangoRequest(request)
|
||||
self.tool_config = tool_config
|
||||
self.launch_data_storage = launch_data_storage or DjangoSessionService(request)
|
||||
|
||||
@@ -23,7 +53,7 @@ class DjangoOIDCLogin:
|
||||
"""Get the redirect object for OIDC login"""
|
||||
from pylti1p3.oidc_login import OIDCLogin
|
||||
|
||||
oidc_login = OIDCLogin(self.request, self.tool_config, session_service=self.launch_data_storage, cookie_service=self.launch_data_storage)
|
||||
oidc_login = OIDCLogin(self.lti_request, self.tool_config, session_service=self.launch_data_storage, cookie_service=self.launch_data_storage)
|
||||
|
||||
return oidc_login.enable_check_cookies().redirect(redirect_url)
|
||||
|
||||
@@ -33,6 +63,7 @@ class DjangoMessageLaunch:
|
||||
|
||||
def __init__(self, request, tool_config, launch_data_storage=None):
|
||||
self.request = request
|
||||
self.lti_request = DjangoRequest(request)
|
||||
self.tool_config = tool_config
|
||||
self.launch_data_storage = launch_data_storage or DjangoSessionService(request)
|
||||
|
||||
@@ -40,7 +71,7 @@ class DjangoMessageLaunch:
|
||||
"""Validate the LTI launch message"""
|
||||
from pylti1p3.message_launch import MessageLaunch
|
||||
|
||||
message_launch = MessageLaunch(self.request, self.tool_config, session_service=self.launch_data_storage, cookie_service=self.launch_data_storage)
|
||||
message_launch = MessageLaunch(self.lti_request, self.tool_config, session_service=self.launch_data_storage, cookie_service=self.launch_data_storage)
|
||||
|
||||
return message_launch
|
||||
|
||||
|
||||
12
lti/views.py
12
lti/views.py
@@ -30,7 +30,7 @@ from rest_framework.views import APIView
|
||||
from files.models import Media
|
||||
from rbac.models import RBACMembership
|
||||
|
||||
from .adapters import DjangoSessionService, DjangoToolConfig
|
||||
from .adapters import DjangoRequest, DjangoSessionService, DjangoToolConfig
|
||||
from .handlers import (
|
||||
apply_lti_roles,
|
||||
create_lti_session,
|
||||
@@ -85,10 +85,13 @@ class OIDCLoginView(View):
|
||||
# Create tool config for this platform
|
||||
tool_config = DjangoToolConfig.from_platform(platform)
|
||||
|
||||
# Wrap Django request for PyLTI1p3
|
||||
lti_request = DjangoRequest(request)
|
||||
|
||||
# Create OIDC login handler with session and cookie services
|
||||
session_service = DjangoSessionService(request)
|
||||
cookie_service = DjangoSessionService(request) # Using same service for cookies
|
||||
oidc_login = OIDCLogin(request, tool_config, session_service=session_service, cookie_service=cookie_service)
|
||||
oidc_login = OIDCLogin(lti_request, tool_config, session_service=session_service, cookie_service=cookie_service)
|
||||
|
||||
# Redirect to platform's authorization endpoint
|
||||
redirect_obj = oidc_login.enable_check_cookies().redirect(target_link_uri)
|
||||
@@ -138,10 +141,13 @@ class LaunchView(View):
|
||||
# Create tool config
|
||||
tool_config = DjangoToolConfig.from_platform(platform)
|
||||
|
||||
# Wrap Django request for PyLTI1p3
|
||||
lti_request = DjangoRequest(request)
|
||||
|
||||
# Validate JWT and get launch data
|
||||
session_service = DjangoSessionService(request)
|
||||
cookie_service = DjangoSessionService(request)
|
||||
message_launch = MessageLaunch(request, tool_config, session_service=session_service, cookie_service=cookie_service)
|
||||
message_launch = MessageLaunch(lti_request, tool_config, session_service=session_service, cookie_service=cookie_service)
|
||||
|
||||
# Get validated launch data
|
||||
launch_data = message_launch.get_launch_data()
|
||||
|
||||
Reference in New Issue
Block a user