Pass the referer from the client to the YouTube API

This fixes the errors when the API key is configured to require a
referer for all the requests.
This commit is contained in:
Guruprasad Lakshmi Narayanan
2019-08-29 23:36:20 +05:30
parent dea918b8b8
commit fad200f81b
2 changed files with 10 additions and 4 deletions

View File

@@ -385,7 +385,7 @@ class VideoStudentViewHandlers(object):
runtime uses a similar REST API that's not an XBlock handler.
"""
from lms.djangoapps.courseware.views.views import load_metadata_from_youtube
metadata, status_code = load_metadata_from_youtube(video_id=self.youtube_id_1_0)
metadata, status_code = load_metadata_from_youtube(video_id=self.youtube_id_1_0, request=request)
response = Response(json.dumps(metadata), status=status_code)
response.content_type = 'application/json'
return response

View File

@@ -284,11 +284,11 @@ def yt_video_metadata(request):
:return: youtube video metadata
"""
video_id = request.GET.get('id', None)
metadata, status_code = load_metadata_from_youtube(video_id)
metadata, status_code = load_metadata_from_youtube(video_id, request)
return Response(metadata, status=status_code, content_type='application/json')
def load_metadata_from_youtube(video_id):
def load_metadata_from_youtube(video_id, request):
"""
Get metadata about a YouTube video.
@@ -301,9 +301,15 @@ def load_metadata_from_youtube(video_id):
yt_api_key = settings.YOUTUBE_API_KEY
yt_metadata_url = settings.YOUTUBE['METADATA_URL']
yt_timeout = settings.YOUTUBE.get('TEST_TIMEOUT', 1500) / 1000 # converting milli seconds to seconds
headers = {}
http_referer = request.META.get('HTTP_REFERER')
if http_referer:
headers['Referer'] = http_referer
payload = {'id': video_id, 'part': 'contentDetails', 'key': yt_api_key}
try:
res = requests.get(yt_metadata_url, params=payload, timeout=yt_timeout)
res = requests.get(yt_metadata_url, params=payload, timeout=yt_timeout, headers=headers)
status_code = res.status_code
if res.status_code == 200:
try: