73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""
|
|
Additional utilities for Learner Home
|
|
"""
|
|
|
|
import logging
|
|
|
|
from django.urls import reverse
|
|
from django.contrib.auth import get_user_model
|
|
from django.core.exceptions import MultipleObjectsReturned
|
|
from rest_framework.exceptions import PermissionDenied, NotFound
|
|
|
|
from common.djangoapps.student.models import (
|
|
get_user_by_username_or_email,
|
|
)
|
|
from lms.djangoapps.course_home_api.toggles import course_home_mfe_progress_tab_is_active
|
|
from openedx.features.course_experience.url_helpers import get_learning_mfe_home_url
|
|
|
|
log = logging.getLogger(__name__)
|
|
User = get_user_model()
|
|
|
|
|
|
def get_masquerade_user(request):
|
|
"""
|
|
Determine if the user is masquerading
|
|
|
|
Returns:
|
|
- masquerade_user if allowed and masquerade user found
|
|
- None if not masquerading
|
|
|
|
Raises:
|
|
- PermissionDenied if user is not staff
|
|
- NotFound if masquerade user does not exist
|
|
"""
|
|
if request.GET.get("user"):
|
|
if not request.user.is_staff:
|
|
log.info(
|
|
f"[Learner Home] {request.user.username} attempted to masquerade but is not staff"
|
|
)
|
|
raise PermissionDenied()
|
|
|
|
masquerade_identifier = request.GET.get("user")
|
|
try:
|
|
masquerade_user = get_user_by_username_or_email(masquerade_identifier)
|
|
except User.DoesNotExist:
|
|
raise NotFound() # pylint: disable=raise-missing-from
|
|
except MultipleObjectsReturned:
|
|
msg = (
|
|
f"[Learner Home] {masquerade_identifier} could refer to multiple learners. "
|
|
" Defaulting to username."
|
|
)
|
|
log.info(msg)
|
|
masquerade_user = User.objects.get(username=masquerade_identifier)
|
|
|
|
success_msg = (
|
|
f"[Learner Home] {request.user.username} masquerades as "
|
|
f"{masquerade_user.username} - {masquerade_user.email}"
|
|
)
|
|
log.info(success_msg)
|
|
return masquerade_user
|
|
|
|
|
|
def course_progress_url(course_key) -> str:
|
|
"""
|
|
Returns the course progress page's URL for the current user.
|
|
|
|
:param course_key: The course key for which the home url is being requested.
|
|
|
|
:return: The course progress page URL.
|
|
"""
|
|
if course_home_mfe_progress_tab_is_active(course_key):
|
|
return get_learning_mfe_home_url(course_key, url_fragment='progress')
|
|
return reverse('progress', kwargs={'course_id': course_key})
|