mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-01-20 15:22:58 -05:00
this
This commit is contained in:
@@ -8,14 +8,44 @@ import json
|
|||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
from pylti1p3.request import Request
|
||||||
from pylti1p3.tool_config import ToolConfAbstract
|
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:
|
class DjangoOIDCLogin:
|
||||||
"""Handles OIDC login initiation"""
|
"""Handles OIDC login initiation"""
|
||||||
|
|
||||||
def __init__(self, request, tool_config, launch_data_storage=None):
|
def __init__(self, request, tool_config, launch_data_storage=None):
|
||||||
self.request = request
|
self.request = request
|
||||||
|
self.lti_request = DjangoRequest(request)
|
||||||
self.tool_config = tool_config
|
self.tool_config = tool_config
|
||||||
self.launch_data_storage = launch_data_storage or DjangoSessionService(request)
|
self.launch_data_storage = launch_data_storage or DjangoSessionService(request)
|
||||||
|
|
||||||
@@ -23,7 +53,7 @@ class DjangoOIDCLogin:
|
|||||||
"""Get the redirect object for OIDC login"""
|
"""Get the redirect object for OIDC login"""
|
||||||
from pylti1p3.oidc_login import OIDCLogin
|
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)
|
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):
|
def __init__(self, request, tool_config, launch_data_storage=None):
|
||||||
self.request = request
|
self.request = request
|
||||||
|
self.lti_request = DjangoRequest(request)
|
||||||
self.tool_config = tool_config
|
self.tool_config = tool_config
|
||||||
self.launch_data_storage = launch_data_storage or DjangoSessionService(request)
|
self.launch_data_storage = launch_data_storage or DjangoSessionService(request)
|
||||||
|
|
||||||
@@ -40,7 +71,7 @@ class DjangoMessageLaunch:
|
|||||||
"""Validate the LTI launch message"""
|
"""Validate the LTI launch message"""
|
||||||
from pylti1p3.message_launch import MessageLaunch
|
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
|
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 files.models import Media
|
||||||
from rbac.models import RBACMembership
|
from rbac.models import RBACMembership
|
||||||
|
|
||||||
from .adapters import DjangoSessionService, DjangoToolConfig
|
from .adapters import DjangoRequest, DjangoSessionService, DjangoToolConfig
|
||||||
from .handlers import (
|
from .handlers import (
|
||||||
apply_lti_roles,
|
apply_lti_roles,
|
||||||
create_lti_session,
|
create_lti_session,
|
||||||
@@ -85,10 +85,13 @@ class OIDCLoginView(View):
|
|||||||
# Create tool config for this platform
|
# Create tool config for this platform
|
||||||
tool_config = DjangoToolConfig.from_platform(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
|
# Create OIDC login handler with session and cookie services
|
||||||
session_service = DjangoSessionService(request)
|
session_service = DjangoSessionService(request)
|
||||||
cookie_service = DjangoSessionService(request) # Using same service for cookies
|
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 to platform's authorization endpoint
|
||||||
redirect_obj = oidc_login.enable_check_cookies().redirect(target_link_uri)
|
redirect_obj = oidc_login.enable_check_cookies().redirect(target_link_uri)
|
||||||
@@ -138,10 +141,13 @@ class LaunchView(View):
|
|||||||
# Create tool config
|
# Create tool config
|
||||||
tool_config = DjangoToolConfig.from_platform(platform)
|
tool_config = DjangoToolConfig.from_platform(platform)
|
||||||
|
|
||||||
|
# Wrap Django request for PyLTI1p3
|
||||||
|
lti_request = DjangoRequest(request)
|
||||||
|
|
||||||
# Validate JWT and get launch data
|
# Validate JWT and get launch data
|
||||||
session_service = DjangoSessionService(request)
|
session_service = DjangoSessionService(request)
|
||||||
cookie_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
|
# Get validated launch data
|
||||||
launch_data = message_launch.get_launch_data()
|
launch_data = message_launch.get_launch_data()
|
||||||
|
|||||||
Reference in New Issue
Block a user