mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +01:00
proxy support: update for wsgiprox==1.2, transfer-encoding/buffering support now part of wsgiprox
frame insert: set 'iframe_url' to full rewritten url, or in proxy mode, original url with scheme matching current scheme
This commit is contained in:
parent
15a7b15d44
commit
7ceeb32531
@ -31,7 +31,7 @@ html, body
|
|||||||
</head>
|
</head>
|
||||||
<body style="margin: 0px; padding: 0px;">
|
<body style="margin: 0px; padding: 0px;">
|
||||||
<div class="wb_iframe_div">
|
<div class="wb_iframe_div">
|
||||||
<iframe id="replay_iframe" src="{{ wbrequest.wb_prefix + embed_url }}" onload="" frameborder="0" seamless="seamless" scrolling="yes" class="wb_iframe"></iframe>
|
<iframe id="replay_iframe" src="{{ iframe_url }}" onload="" frameborder="0" seamless="seamless" scrolling="yes" class="wb_iframe"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -20,7 +20,7 @@ from pywb.webagg.utils import BUFF_SIZE
|
|||||||
from pywb.cdx.cdxobject import CDXObject
|
from pywb.cdx.cdxobject import CDXObject
|
||||||
from pywb.framework.wbrequestresponse import WbResponse
|
from pywb.framework.wbrequestresponse import WbResponse
|
||||||
|
|
||||||
from pywb.webagg.utils import MementoUtils, buffer_iter, chunk_encode_iter
|
from pywb.webagg.utils import MementoUtils
|
||||||
|
|
||||||
from werkzeug.http import HTTP_STATUS_CODES
|
from werkzeug.http import HTTP_STATUS_CODES
|
||||||
from six.moves.urllib.parse import urlencode, urlsplit, urlunsplit
|
from six.moves.urllib.parse import urlencode, urlsplit, urlunsplit
|
||||||
@ -122,10 +122,10 @@ class RewriterApp(object):
|
|||||||
|
|
||||||
return WbResponse.text_response(resp, content_type=content_type)
|
return WbResponse.text_response(resp, content_type=content_type)
|
||||||
|
|
||||||
is_proxy = ('wsgiprox.fixed_host' in environ)
|
is_proxy = ('wsgiprox.proxy_host' in environ)
|
||||||
|
|
||||||
if is_proxy:
|
if is_proxy:
|
||||||
environ['pywb_proxy_magic'] = environ['wsgiprox.fixed_host']
|
environ['pywb_proxy_magic'] = environ['wsgiprox.proxy_host']
|
||||||
urlrewriter = SchemeOnlyUrlRewriter(wb_url, '')
|
urlrewriter = SchemeOnlyUrlRewriter(wb_url, '')
|
||||||
framed_replay = False
|
framed_replay = False
|
||||||
|
|
||||||
@ -295,29 +295,11 @@ class RewriterApp(object):
|
|||||||
response = WbResponse(status_headers, gen)
|
response = WbResponse(status_headers, gen)
|
||||||
|
|
||||||
if is_proxy:
|
if is_proxy:
|
||||||
self.prepare_proxy_response(response, environ)
|
response.status_headers.remove_header('Content-Security-Policy')
|
||||||
|
response.status_headers.remove_header('X-Frame-Options')
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def prepare_proxy_response(self, response, environ):
|
|
||||||
response.status_headers.remove_header('Content-Security-Policy')
|
|
||||||
|
|
||||||
res = response.status_headers.get_header('content-length')
|
|
||||||
try:
|
|
||||||
if int(res) > 0:
|
|
||||||
return
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# need to either chunk or buffer to get content-length
|
|
||||||
if environ.get('SERVER_PROTOCOL') == 'HTTP/1.1':
|
|
||||||
response.status_headers.remove_header('content-length')
|
|
||||||
response.status_headers.headers.append(('Transfer-Encoding', 'chunked'))
|
|
||||||
response.body = chunk_encode_iter(response.body)
|
|
||||||
else:
|
|
||||||
response.body = buffer_iter(response.status_headers,
|
|
||||||
response.body)
|
|
||||||
|
|
||||||
def _add_memento_links(self, urlrewriter, full_prefix, memento_dt, status_headers):
|
def _add_memento_links(self, urlrewriter, full_prefix, memento_dt, status_headers):
|
||||||
wb_url = urlrewriter.wburl
|
wb_url = urlrewriter.wburl
|
||||||
status_headers.headers.append(('Memento-Datetime', memento_dt))
|
status_headers.headers.append(('Memento-Datetime', memento_dt))
|
||||||
@ -457,7 +439,7 @@ class RewriterApp(object):
|
|||||||
scheme = environ['wsgi.url_scheme'] + '://'
|
scheme = environ['wsgi.url_scheme'] + '://'
|
||||||
|
|
||||||
# proxy
|
# proxy
|
||||||
host = environ.get('wsgiprox.fixed_host')
|
host = environ.get('wsgiprox.proxy_host')
|
||||||
if host:
|
if host:
|
||||||
return scheme + host
|
return scheme + host
|
||||||
|
|
||||||
|
@ -176,6 +176,13 @@ class TopFrameView(BaseInsertView):
|
|||||||
else:
|
else:
|
||||||
timestamp = timestamp_now()
|
timestamp = timestamp_now()
|
||||||
|
|
||||||
|
if 'wsgiprox.proxy_host' in env:
|
||||||
|
if not wb_url.url.startswith(env['wsgi.url_scheme'] + ':'):
|
||||||
|
wb_url.url = env['wsgi.url_scheme'] + ':' + wb_url.url.split(':', 1)[-1]
|
||||||
|
iframe_url = wb_url.url
|
||||||
|
else:
|
||||||
|
iframe_url = wb_prefix + embed_url
|
||||||
|
|
||||||
wbrequest = {'host_prefix': host_prefix,
|
wbrequest = {'host_prefix': host_prefix,
|
||||||
'wb_prefix': wb_prefix,
|
'wb_prefix': wb_prefix,
|
||||||
'wb_url': wb_url,
|
'wb_url': wb_url,
|
||||||
@ -186,6 +193,7 @@ class TopFrameView(BaseInsertView):
|
|||||||
}
|
}
|
||||||
|
|
||||||
params = dict(embed_url=embed_url,
|
params = dict(embed_url=embed_url,
|
||||||
|
iframe_url=iframe_url,
|
||||||
wbrequest=wbrequest,
|
wbrequest=wbrequest,
|
||||||
timestamp=timestamp,
|
timestamp=timestamp,
|
||||||
url=wb_url.get_url(),
|
url=wb_url.get_url(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user