Skip to content

Commit 7ea4d8a

Browse files
committed
Implement X-Forwarded-* for twisted http transport wsdl generation
1 parent 1bfebfe commit 7ea4d8a

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

spyne/server/twisted/http.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,35 @@ def _set_response_headers(request, headers):
153153

154154
def _reconstruct_url(request):
155155
# HTTP "Hosts" header only supports ascii
156-
server_name = request.getRequestHostname().decode('ascii')
157-
server_port = request.getHost().port
158-
if (bool(request.isSecure()), server_port) not in [(True, 443), (False, 80)]:
156+
157+
server_name = request.getHeader(b"x-forwarded-host")
158+
server_port = request.getHeader(b"x-forwarded-port")
159+
if server_port is not None:
160+
try:
161+
server_port = int(server_port)
162+
except Exception as e:
163+
logger.debug("Ignoring exception: %r for value %r", e, server_port)
164+
server_port = None
165+
166+
is_secure = request.getHeader(b"x-forwarded-proto")
167+
if is_secure is not None:
168+
is_secure = is_secure == 'https'
169+
170+
if server_name is None:
171+
server_name = request.getRequestHostname().decode('ascii')
172+
if server_port is None:
173+
server_port = request.getHost().port
174+
if is_secure is None:
175+
is_secure = bool(request.isSecure())
176+
177+
if (is_secure, server_port) not in ((True, 443), (False, 80)):
159178
server_name = '%s:%d' % (server_name, server_port)
160179

161-
if request.isSecure():
180+
if is_secure:
162181
url_scheme = 'https'
163182
else:
164183
url_scheme = 'http'
184+
165185
uri = _decode_path(request.uri)
166186
return ''.join([url_scheme, "://", server_name, uri])
167187

@@ -585,6 +605,10 @@ def handle_rpc(self, request):
585605
return retval
586606

587607
def __handle_wsdl_request(self, request):
608+
# disabled for performance reasons.
609+
# logger.debug("WSDL request headers: %r",
610+
# list(request.requestHeaders.getAllRawHeaders()))
611+
588612
ctx = TwistedHttpMethodContext(self.http_transport, request,
589613
"text/xml; charset=utf-8")
590614
url = _reconstruct_url(request)

0 commit comments

Comments
 (0)