1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +01:00

origin header improvement: if Referer header is available, compute Origin from the Referer, not from target url (#329)

(Origin header received will be the pywb host, using Referer will result in more accurate Origin, which may not be the target url)
tests: add tests to verify Origin header with and without Referer
This commit is contained in:
Ilya Kreymer 2018-05-21 11:57:43 -07:00 committed by GitHub
parent a8bb3cfce6
commit 5f3d37bb44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 2 deletions

View File

@ -49,8 +49,14 @@ class RewriteInputRequest(DirectWSGIInputRequest):
elif name == 'HTTP_ORIGIN':
name = 'Origin'
if self.splits:
value = (self.splits.scheme + '://' + self.splits.netloc)
referrer = self.env.get('HTTP_REFERER')
if referrer:
splits = urlsplit(referrer)
else:
splits = self.splits
if splits:
value = (splits.scheme + '://' + splits.netloc)
elif name == 'HTTP_X_CSRFTOKEN':
name = 'X-CSRFToken'

View File

@ -64,3 +64,22 @@ class TestLiveRewriter(HttpBinLiveTests, BaseConfigTest):
def test_deflate(self, fmod_sl):
resp = self.get('/live/{0}http://httpbin.org/deflate', fmod_sl)
assert b'"deflated": true' in resp.body
def test_live_origin_and_referrer(self, fmod_sl):
headers = {'Referer': 'http://localhost:80/live/{0}http://example.com/test'.format(fmod_sl),
'Origin': 'http://localhost:80'
}
resp = self.get('/live/{0}http://httpbin.org/get?test=headers', fmod_sl, headers=headers)
assert resp.json['headers']['Referer'] == 'http://example.com/test'
assert resp.json['headers']['Origin'] == 'http://example.com'
def test_live_origin_no_referrer(self, fmod_sl):
headers = {'Origin': 'http://localhost:80'}
resp = self.get('/live/{0}http://httpbin.org/get?test=headers', fmod_sl, headers=headers)
assert resp.json['headers']['Origin'] == 'http://httpbin.org'