def start_auth(request): """ Step 1 of oauth authentication: get the REQUEST_TOKEN """ # Redirect to KA, for auth. They will return to central, and we'll be able to continue # using data from the session central_callback_url = request.build_absolute_uri(reverse('update_all_central_callback')) client = TestOAuthClient(KHAN_SERVER_URL, settings.KHAN_API_CONSUMER_KEY, settings.KHAN_API_CONSUMER_SECRET) return HttpResponseRedirect(client.start_fetch_request_token(central_callback_url))
def get_api_resource(request, resource_url): """ Step 3 of the api process: Get the data. """ logging.info("Getting data from khan academy (%s)." % resource_url) client = TestOAuthClient(KHAN_SERVER_URL, settings.KHAN_API_CONSUMER_KEY, settings.KHAN_API_CONSUMER_SECRET) start = time.time() response = client.access_resource(resource_url, request.session["ACCESS_TOKEN"]) end = time.time() logging.debug("API (%s) time: %s" % (resource_url, end - start)) data = json.loads(response) logging.info("Got %d items from khan academy (%s)." % (len(data), resource_url)) return data
def finish_auth(request): """ Step 2 of the oauth authentication: use the REQUEST_TOKEN to get an ACCESS_TOKEN """ params = request.GET try: request.session["REQUEST_TOKEN"] = OAuthToken(params['oauth_token'], params['oauth_token_secret']) request.session["REQUEST_TOKEN"].set_verifier(params['oauth_verifier']) except MultiValueDictKeyError as e: # we just want to generate a 500 anyway; # nothing we could do here except give a slightly more meaningful error raise e logging.debug("Getting access token.") client = TestOAuthClient(KHAN_SERVER_URL, settings.KHAN_API_CONSUMER_KEY, settings.KHAN_API_CONSUMER_SECRET) request.session["ACCESS_TOKEN"] = client.fetch_access_token(request.session["REQUEST_TOKEN"]) if not request.session["ACCESS_TOKEN"]: raise Exception("Did not get access token.") return request.session["ACCESS_TOKEN"]