Skip to content

Commit

Permalink
urllib2 out, requests in; Removing X-Forwarding headers to prevent re…
Browse files Browse the repository at this point in the history
…direct loops
  • Loading branch information
jaedb committed Oct 6, 2017
1 parent b344c35 commit 28b5f69
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 54 deletions.
94 changes: 41 additions & 53 deletions mopidy_iris/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import tornado.web
import tornado.websocket
import tornado.ioloop
import requests
from mopidy import config, ext
from mopidy.core import CoreListener
from pkg_resources import parse_version
Expand Down Expand Up @@ -559,13 +560,9 @@ def refresh_spotify_token(self, *args, **kwargs):
'grant_type': 'client_credentials'
}

data_encoded = urllib.urlencode( data )
req = urllib2.Request(url, data_encoded)

try:
response = urllib2.urlopen(req, timeout=30).read()
response_dict = json.loads(response)
self.spotify_token = response_dict
response = requests.post(url, data)
self.spotify_token = response.json()

self.broadcast(
data={
Expand Down Expand Up @@ -622,72 +619,63 @@ def proxy_request(self, *args, **kwargs):
# Construct request headers
# If we have an original request, pass through it's headers
if origin_request:
target_request_headers = origin_request.headers
headers = origin_request.headers
else:
target_request_headers = {}
headers = {}

# Adjust headers
target_request_headers["Accept-Language"] = "*"
target_request_headers["Accept-Encoding"] = "deflate"
if "Content-Type" in target_request_headers:
del target_request_headers["Content-Type"]
if "Host" in target_request_headers:
del target_request_headers["Host"]
headers["Accept-Language"] = "*"
headers["Accept-Encoding"] = "deflate"
if "Content-Type" in headers:
del headers["Content-Type"]
if "Host" in headers:
del headers["Host"]
if "X-Requested-With" in headers:
del headers["X-Requested-With"]
if "X-Forwarded-Server" in headers:
del headers["X-Forwarded-Server"]
if "X-Forwarded-Host" in headers:
del headers["X-Forwarded-Host"]
if "X-Forwarded-For" in headers:
del headers["X-Forwarded-For"]
if "Referrer" in headers:
del headers["Referrer"]

# Our request includes data, so make sure we POST the data
if ('data' in data and data['data']):
target_request = urllib2.Request(data['url'], data=urllib.urlencode(data['data']), headers=target_request_headers)
# Now actually attempt the request
try:
# Our request includes data, so make sure we POST the data
if ('data' in data and data['data']):
response = requests.post(data['url'], data=data['data'], headers=headers, verify=False)

# No data, so just a simple GET request
else:
# No data, so just a simple GET request
else:

# Strip out our origin content-length otherwise this confuses
# the target server as content-length doesn't apply to GET requests
if "Content-Length" in target_request_headers:
del target_request_headers["Content-Length"]
# Strip out our origin content-length otherwise this confuses
# the target server as content-length doesn't apply to GET requests
if "Content-Length" in headers:
del headers["Content-Length"]

target_request = urllib2.Request(data['url'], headers=target_request_headers)
response = requests.get(data['url'], headers=headers, verify=False)

# Now actually attempt the request
try:
target_response = urllib2.urlopen(target_request, timeout=30)
target_response_body = target_response.read()

# Attempt to decode body as JSON, otherwise just return plain text
try:
response = json.loads(target_response_body)
return {
'response': response,
'response_code': int(target_response.code)
'response_code': int(response.status_code),
'response': response.json()
}
except:
return {
'response': target_response_body
'response_code': int(response.status_code),
'response': response.text
}

except urllib2.HTTPError as e:
return {
'status': 0,
'message': 'Could not complete proxy request',
'source': 'proxy_request',
'response': e.read(),
'response_code': int(e.code),
'original_request': data
}

except urllib2.URLError as e:
return {
'status': 0,
'message': 'Could not complete proxy request',
'source': 'proxy_request',
'response_code': int(e.code),
'original_request': data
}

else:
except requests.exceptions.RequestException as e:
return {
'status': 0,
'message': 'Could not complete proxy request',
'source': 'proxy_request',
'response_code': null,
'response': e.text,
'response_code': int(e.response_code),
'original_request': data
}
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ def get_version(filename):
'Mopidy >= 2.0',
'Mopidy-Local-Images >= 1.0',
'ConfigObj >= 5.0.6',
'raven >= 6.1.0'
'raven >= 6.1.0',
'requests >= 2.0.0'
],
classifiers=[
'Environment :: No Input/Output (Daemon)',
Expand Down

0 comments on commit 28b5f69

Please sign in to comment.