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:
parent
a8bb3cfce6
commit
5f3d37bb44
@ -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'
|
||||
|
@ -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'
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user