From 0e00393c6cc871ac7d498fd3bc7e7577ba8eff1b Mon Sep 17 00:00:00 2001 From: Troy Sankey Date: Mon, 21 Sep 2026 19:40:00 -0700 Subject: [PATCH] feat: replace enterprise username import in progress/views.py with pluggable_override Remove get_enterprise_learner_generic_name import. Add obfuscated_username function decorated with @pluggable_override('OVERRIDE_COURSE_HOME_PROGRESS_USERNAME') returning None by default. ENT-11572 --- .../course_home_api/progress/views.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lms/djangoapps/course_home_api/progress/views.py b/lms/djangoapps/course_home_api/progress/views.py index 54e71df48cc5..7a6e776ce26e 100644 --- a/lms/djangoapps/course_home_api/progress/views.py +++ b/lms/djangoapps/course_home_api/progress/views.py @@ -5,6 +5,7 @@ from django.contrib.auth import get_user_model from django.http.response import Http404 from edx_django_utils import monitoring as monitoring_utils +from edx_django_utils.plugins import pluggable_override from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication from edx_rest_framework_extensions.auth.session.authentication import SessionAuthenticationAllowInactiveUser from opaque_keys.edx.keys import CourseKey @@ -39,11 +40,23 @@ from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser from openedx.features.content_type_gating.block_transformers import ContentTypeGateTransformer from openedx.features.course_duration_limits.access import get_access_expiration_data -from openedx.features.enterprise_support.utils import get_enterprise_learner_generic_name User = get_user_model() +@pluggable_override('OVERRIDE_COURSE_HOME_PROGRESS_USERNAME') +def obfuscated_username(request, student): + """ + Return an obfuscated username for the student, or None (indicating student's + real name should be used). + + This function can be overridden by an installed plugin via the + OVERRIDE_COURSE_HOME_PROGRESS_USERNAME setting to return a generic name + for learners who should not have their real username exposed. + """ + return None + + class ProgressTabView(RetrieveAPIView): """ **Use Cases** @@ -206,7 +219,7 @@ def get(self, request, *args, **kwargs): is_staff = bool(has_access(request.user, 'staff', course_key)) student = self._get_student_user(request, course_key, student_id, is_staff) - username = get_enterprise_learner_generic_name(request) or student.username + username = obfuscated_username(request, student) or student.username course = get_course_or_403(student, 'load', course_key, check_if_enrolled=False)