Beispiel #1
0
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)
Beispiel #2
0
    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
            },
        )
Beispiel #3
0
    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)