@ -415,13 +415,9 @@ class CourseOnlineClassTokenAPIView(GenericAPIView):
class CourseOnlineClassTokenValidateAPIView ( GenericAPIView ) :
permission_classes = [ AllowAny ]
serializer_class = OnlineClassTokenVerifySerializer
def get_permissions ( self ) :
if self . request . method == ' GET ' :
return [ IsAuthenticated ( ) ]
return [ AllowAny ( ) ]
@swagger_auto_schema (
tags = [ ' Imam-Javad - Course ' ] ,
operation_description = " Get course and user data for authenticated user. " ,
@ -452,6 +448,14 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
}
)
def get ( self , request , slug , * args , * * kwargs ) :
print ( " = " * 80 )
print ( f " [Online Validate GET] REQUEST RECEIVED {request.data} " )
print ( f " [Online Validate GET] slug={slug} " )
print ( f " [Online Validate GET] user={request.user} " )
print ( f " [Online Validate GET] user.is_authenticated={request.user.is_authenticated} " )
print ( f " [Online Validate GET] user.id={request.user.id if request.user.is_authenticated else ' N/A ' } " )
print ( " = " * 80 )
logger . info ( f " [Online Validate GET] Request received - slug={slug} user_id={request.user.id if request.user.is_authenticated else ' anonymous ' } " )
detail_view = CourseDetailAPIView ( )
@ -459,6 +463,7 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
course = get_object_or_404 ( queryset , slug = slug )
user = request . user
print ( f " [Online Validate GET] Course found - course_id={course.id} slug={slug} is_online={course.is_online} " )
logger . info ( f " [Online Validate GET] Course found - course_id={course.id} slug={slug} is_online={course.is_online} " )
# DEPRECATED: Polling approach replaced by webhook integration
@ -469,11 +474,12 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
user_data = UserProfileSerializer ( user , context = { ' request ' : request } ) . data
metadata = self . _build_metadata (
course ,
{ ' user_id ' : user . id , ' extra ' : { } , ' generated_at ' : timezone . now ( ) . isoformat ( ) } ,
{ ' user_id ' : user . id if user . is_authenticated else None , ' extra ' : { } , ' generated_at ' : timezone . now ( ) . isoformat ( ) } ,
user = user ,
)
logger . info ( f " [Online Validate GET] Success - user_id={user.id} course={slug} can_create={metadata.get( ' can_create_live_session ' )} can_join={metadata.get( ' can_join_live_session ' )} " )
print ( f " [Online Validate GET] Success - metadata={metadata} " )
logger . info ( f " [Online Validate GET] Success - user_id={user.id if user.is_authenticated else ' anonymous ' } course={slug} can_create={metadata.get( ' can_create_live_session ' )} can_join={metadata.get( ' can_join_live_session ' )} " )
return Response ( {
' course ' : course_data ,
@ -504,29 +510,40 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
}
)
def post ( self , request , * args , * * kwargs ) :
print ( " = " * 80 )
print ( f " [Online Validate POST] REQUEST RECEIVED " )
print ( f " [Online Validate POST] request.data={request.data} " )
print ( f " [Online Validate POST] has_token={ ' token ' in request.data} " )
print ( " = " * 80 )
logger . info ( f " [Online Validate POST] Request received - has_token={ ' token ' in request.data} " )
serializer = self . get_serializer ( data = request . data )
serializer . is_valid ( raise_exception = True )
token_value = serializer . validated_data [ ' token ' ]
print ( f " [Online Validate POST] Token extracted - token={token_value[:16]}... " )
logger . info ( f " [Online Validate POST] Token extracted - token={token_value[:16]}... " )
manager = OnlineClassTokenManager ( )
try :
payload = manager . get_payload ( token_value )
print ( f " [Online Validate POST] Token decoded successfully - payload={payload} " )
logger . info ( f " [Online Validate POST] Token decoded successfully - payload={payload} " )
except Exception as e :
print ( f " [Online Validate POST] Token decode FAILED - error={str(e)} type={type(e).__name__} " )
logger . error ( f " [Online Validate POST] Token decode failed - error={str(e)} type={type(e).__name__} " )
raise
course_id = payload . get ( ' course_id ' )
user_id = payload . get ( ' user_id ' )
if not course_id or not user_id :
print ( f " [Online Validate POST] Invalid token payload - course_id={course_id} user_id={user_id} " )
logger . warning ( f " [Online Validate POST] Invalid token payload - course_id={course_id} user_id={user_id} " )
raise AppAPIException ( { ' message ' : ' Token payload is invalid. ' } , status_code = status . HTTP_400_BAD_REQUEST )
print ( f " [Online Validate POST] Processing for user_id={user_id} course_id={course_id} " )
logger . info ( f " [Online Validate POST] Processing for user_id={user_id} course_id={course_id} " )
detail_view = CourseDetailAPIView ( )
@ -534,12 +551,14 @@ class CourseOnlineClassTokenValidateAPIView(GenericAPIView):
course = get_object_or_404 ( queryset , pk = course_id )
user = get_object_or_404 ( UserModel . objects . all ( ) , pk = user_id )
print ( f " [Online Validate POST] Course found - slug={course.slug} is_online={course.is_online} " )
logger . info ( f " [Online Validate POST] Course found - slug={course.slug} is_online={course.is_online} " )
course_data = CourseDetailSerializer ( course , context = { ' request ' : request } ) . data
user_data = UserProfileSerializer ( user , context = { ' request ' : request } ) . data
metadata = self . _build_metadata ( course , payload , user = user )
print ( f " [Online Validate POST] Success - metadata={metadata} " )
logger . info ( f " [Online Validate POST] Success - user_id={user_id} course={course.slug} can_create={metadata.get( ' can_create_live_session ' )} can_join={metadata.get( ' can_join_live_session ' )} " )
return Response ( {