Ejemplo n.º 1
0
    def dispatch(self, request, *args, **kwargs):
        self.course_api_enabled = switch_is_active('enable_course_api')

        if self.course_api_enabled and request.user.is_authenticated:
            self.access_token = settings.COURSE_API_KEY or EdxRestApiClient.get_and_cache_jwt_oauth_access_token(
                settings.BACKEND_SERVICE_EDX_OAUTH2_PROVIDER_URL,
                settings.BACKEND_SERVICE_EDX_OAUTH2_KEY,
                settings.BACKEND_SERVICE_EDX_OAUTH2_SECRET,
            )[0]
            self.course_api = CourseStructureApiClient(settings.COURSE_API_URL, self.access_token)

        return super(CourseAPIMixin, self).dispatch(request, *args, **kwargs)
Ejemplo n.º 2
0
    def test_shared_client_credential_jwt_access_token(self):
        """
        Test that get_and_cache_jwt_oauth_access_token returns the same access token used by the OAuthAPIClient.
        """
        body = {'access_token': "my-token", 'expires_in': 1000}
        now = datetime.datetime.utcnow()
        expected_return = ('my-token', now + datetime.timedelta(seconds=1000))

        with freeze_time(now):
            self._mock_auth_api(OAUTH_URL, 200, body=body)
            actual_return = EdxRestApiClient.get_and_cache_jwt_oauth_access_token(
                OAUTH_URL, 'client_id', 'client_secret')
        self.assertEqual(actual_return, expected_return)
        self.assertEqual(len(responses.calls), 1)

        # ensure OAuthAPIClient uses the same cached auth token without re-requesting the token from the server
        oauth_client = OAuthAPIClient(OAUTH_URL, 'client_id', 'client_secret')
        self._mock_auth_api(URL, 200, {'status': 'ok'})
        oauth_client.post(URL, data={'test': 'ok'})
        self.assertEqual(oauth_client.auth.token, actual_return[0])
        self.assertEqual(len(responses.calls), 2)
        self.assertEqual(URL, responses.calls[1][0].url)