1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-31 19:24:11 +02:00

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

(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

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

@ -64,3 +64,22 @@ class TestLiveRewriter(HttpBinLiveTests, BaseConfigTest):
def test_deflate(self, fmod_sl): def test_deflate(self, fmod_sl):
resp = self.get('/live/{0}http://httpbin.org/deflate', fmod_sl) resp = self.get('/live/{0}http://httpbin.org/deflate', fmod_sl)
assert b'"deflated": true' in resp.body 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'