def ActivateUserView(request): """ View to activate email. """ token = request.GET.get('token') try: token = AccessToken(token) user_id = token.get('user_id', None) user = User.objects.get(id=user_id) if user.is_active == True: return Response('User is already activated', status=status.HTTP_400_BAD_REQUEST) user.is_active = True user.save() return Response(data='User activated', status=status.HTTP_200_OK) except Exception as error: return Response(error, status=status.HTTP_400_BAD_REQUEST)
def test_views_lti_select(self): """Validate the context passed to the frontend app for a LTI Content selection.""" lti_consumer_parameters = { "roles": random.choice(["instructor", "administrator"]), "content_item_return_url": "https://lti-consumer.site/lti", "context_id": "sent_lti_context_id", "title": "Sent LMS activity title", "text": "Sent LMS activity text", } lti_parameters, passport = generate_passport_and_signed_lti_parameters( url="http://testserver/lti/select/", lti_parameters=lti_consumer_parameters, ) resolutions = [144] playlist = PlaylistFactory( lti_id=lti_parameters.get("context_id"), consumer_site=passport.consumer_site, ) video = VideoFactory( playlist=playlist, uploaded_on=timezone.now(), resolutions=resolutions, position=1, ) document = DocumentFactory( playlist=playlist, uploaded_on=timezone.now(), ) webinar = VideoFactory( playlist=playlist, live_state=IDLE, live_type=JITSI, position=2, ) vod_webinar = VideoFactory( playlist=playlist, live_state=ENDED, live_type=JITSI, position=3, ) response = self.client.post( "/lti/select/", lti_parameters, HTTP_REFERER="http://testserver", ) self.assertEqual(response.status_code, 200) self.assertContains(response, "<html>") match = re.search( '<div id="marsha-frontend-data" data-context="(.*)">', response.content.decode("utf-8"), ) context = json.loads(unescape(match.group(1))) self.assertEqual( context.get("videos")[0].get("lti_url"), f"http://testserver/lti/videos/{video.id}", ) self.assertEqual( context.get("videos")[1].get("lti_url"), f"http://testserver/lti/videos/{vod_webinar.id}", ) self.assertEqual(len(context.get("videos")), 2) self.assertEqual( context.get("documents")[0].get("lti_url"), f"http://testserver/lti/documents/{document.id}", ) self.assertEqual(len(context.get("documents")), 1) self.assertEqual( context.get("webinars")[0].get("lti_url"), f"http://testserver/lti/videos/{webinar.id}", ) self.assertEqual(len(context.get("webinars")), 1) self.assertEqual(context.get("new_document_url"), "http://testserver/lti/documents/") self.assertEqual(context.get("new_video_url"), "http://testserver/lti/videos/") self.assertEqual( context.get("lti_select_form_data").get("activity_title"), "Sent LMS activity title", ) self.assertEqual( context.get("lti_select_form_data").get("activity_description"), "Sent LMS activity text", ) form_data = context.get("lti_select_form_data") initial_jwt_token = AccessToken(form_data.get("jwt")) lti_parameters.update({"lti_message_type": "ContentItemSelection"}) self.assertEqual(initial_jwt_token.get("lti_select_form_data"), lti_parameters) jwt_token = AccessToken(context.get("jwt")) self.assertEqual( jwt_token.get("permissions"), { "can_access_dashboard": False, "can_update": True }, )
def test_views_lti_select_behind_tls_termination_proxy(self): """Validate the context passed to the frontend app for a LTI Content selection.""" lti_consumer_parameters = { "roles": random.choice(["instructor", "administrator"]), "content_item_return_url": "https://lti-consumer.site/lti", "context_id": "sent_lti_context_id", } lti_parameters, passport = generate_passport_and_signed_lti_parameters( url="https://testserver/lti/select/", lti_parameters=lti_consumer_parameters, ) resolutions = [144] playlist = PlaylistFactory( lti_id=lti_parameters.get("context_id"), consumer_site=passport.consumer_site, ) video = VideoFactory( playlist=playlist, uploaded_on=timezone.now(), resolutions=resolutions, ) document = DocumentFactory( playlist=playlist, uploaded_on=timezone.now(), ) response = self.client.post( "/lti/select/", lti_parameters, HTTP_REFERER="http://testserver", HTTP_X_FORWARDED_PROTO="https", ) self.assertEqual(response.status_code, 200) self.assertContains(response, "<html>") match = re.search( '<div id="marsha-frontend-data" data-context="(.*)">', response.content.decode("utf-8"), ) context = json.loads(unescape(match.group(1))) self.assertEqual( context.get("videos")[0].get("lti_url"), f"https://testserver/lti/videos/{video.id}", ) self.assertEqual( context.get("documents")[0].get("lti_url"), f"https://testserver/lti/documents/{document.id}", ) self.assertEqual(context.get("new_document_url"), "https://testserver/lti/documents/") self.assertEqual(context.get("new_video_url"), "https://testserver/lti/videos/") form_data = context.get("lti_select_form_data") jwt_token = AccessToken(form_data.get("jwt")) lti_parameters.update({"lti_message_type": "ContentItemSelection"}) self.assertEqual(jwt_token.get("lti_select_form_data"), lti_parameters)