33that an individual has in the campus LMS platform and on edX.
44"""
55
6+ import logging
67
78import random
89import string
1819from lms .djangoapps .lti_provider .models import LtiUser
1920from openedx .core .djangoapps .safe_sessions .middleware import mark_user_change_as_expected
2021
22+ log = logging .getLogger ("edx.lti_provider" )
23+
2124
2225def get_lti_user_details (request ):
2326 """
@@ -54,21 +57,47 @@ def authenticate_lti_user(request, lti_user_id, lti_consumer):
5457 if lti_consumer .require_user_account :
5558 # Verify that the email from the LTI Launch and the logged-in user are the same
5659 # before linking the LtiUser with the edx_user.
60+ log .info (
61+ 'LTI consumer requires existing user account for LTI user ID: %s from request: %s' ,
62+ lti_user_id ,
63+ request
64+ )
5765 if request .user .is_authenticated and request .user .email .lower () == profile ["email" ]:
5866 lti_user = create_lti_user (lti_user_id , lti_consumer , profile )
5967 else :
68+ log .error (
69+ 'LTI user account linking failed for LTI user ID: %s from request: %s: '
70+ 'either user is not logged in or email mismatched' ,
71+ lti_user_id ,
72+ request
73+ )
6074 # Ask the user to login before linking.
6175 raise PermissionDenied () from exc
6276 elif lti_consumer .use_lti_pii :
77+ log .info (
78+ 'Creating LTI user with PII for LTI user ID: %s from request: %s' ,
79+ lti_user_id ,
80+ request
81+ )
6382 profile ["username" ] = lti_user_id
6483 lti_user = create_lti_user (lti_user_id , lti_consumer , profile )
6584 else :
85+ log .info (
86+ 'Creating LTI user without PII for LTI user ID: %s from request: %s' ,
87+ lti_user_id ,
88+ request
89+ )
6690 lti_user = create_lti_user (lti_user_id , lti_consumer )
6791
6892 if not (request .user .is_authenticated and
6993 request .user == lti_user .edx_user ):
7094 # The user is not authenticated, or is logged in as somebody else.
7195 # Switch them to the LTI user
96+ log .info (
97+ 'Switching logged-in user to LTI user ID: %s for request: %s' ,
98+ lti_user_id ,
99+ request
100+ )
72101 switch_user (request , lti_user , lti_consumer )
73102
74103
@@ -102,6 +131,10 @@ def create_lti_user(lti_user_id, lti_consumer, profile=None):
102131 edx_user_profile .save ()
103132 created = True
104133 except IntegrityError :
134+ log .error (
135+ 'LTI user creation failed for LTI user ID %s. Retrying with a new username' ,
136+ lti_user_id ,
137+ )
105138 edx_user_id = generate_random_edx_username ()
106139 # The random edx_user_id wasn't unique. Since 'created' is still
107140 # False, we will retry with a different random ID.
@@ -128,6 +161,7 @@ def switch_user(request, lti_user, lti_consumer):
128161 if not edx_user :
129162 # This shouldn't happen, since we've created edX accounts for any LTI
130163 # users by this point, but just in case we can return a 403.
164+ log .error ('Switching user failed for LTI user ID: %s from request: %s' , lti_user .lti_user_id , request )
131165 raise PermissionDenied ()
132166 login (request , edx_user )
133167 mark_user_change_as_expected (edx_user .id )
0 commit comments