comparison src/server/blog.py @ 889:2b091322c6cb

blog (atom feed): handle proxy headers like x-forwarded-host to adjust absolute URL in atom feed
author Goffi <goffi@goffi.org>
date Thu, 17 Mar 2016 18:42:15 +0100
parents dd2273617eb7
children dc27e29b7c22
comparison
equal deleted inserted replaced
888:0d719b6a4115 889:2b091322c6cb
402 402
403 # to construct base blog url, we use base_url_ext if given by user 403 # to construct base blog url, we use base_url_ext if given by user
404 # and complete unknown parts with what we find in request's url 404 # and complete unknown parts with what we find in request's url
405 url_path = request.URLPath() 405 url_path = request.URLPath()
406 ext_data = self.host.base_url_ext_data 406 ext_data = self.host.base_url_ext_data
407 if request.requestHeaders.hasHeader('x-forwarded-host'):
408 # we are behing a proxy
409 # we fill proxy_scheme and proxy_netloc value
410 proxy_host = request.requestHeaders.getRawHeaders('x-forwarded-host')[0]
411 try:
412 proxy_server = request.requestHeaders.getRawHeaders('x-forwarded-server')[0]
413 except TypeError:
414 # no x-forwarded-server found, we use proxy_host
415 proxy_netloc = proxy_host
416 else:
417 # if the proxy host has a port, we use it with server name
418 proxy_port = urlparse.urlsplit('//{}'.format(proxy_host)).port
419 proxy_netloc = '{}:{}'.format(proxy_server, proxy_port) if proxy_port is not None else proxy_server
420 proxy_netloc = proxy_netloc.decode('utf-8')
421 try:
422 proxy_scheme = request.requestHeaders.getRawHeaders('x-forwarded-proto')[0].decode('utf-8')
423 except TypeError:
424 proxy_scheme = None
425 else:
426 proxy_scheme, proxy_netloc = None, None
427
407 base_blog_url = urlparse.urlunsplit(( 428 base_blog_url = urlparse.urlunsplit((
408 ext_data.scheme or url_path.scheme.decode('utf-8'), 429 ext_data.scheme or proxy_scheme or url_path.scheme.decode('utf-8'),
409 ext_data.netloc or url_path.netloc.decode('utf-8'), 430 ext_data.netloc or proxy_netloc or url_path.netloc.decode('utf-8'),
410 u'{}blog/{user}'.format(ext_data.path or u'/', user=profile), 431 u'{}blog/{user}'.format(ext_data.path or u'/', user=profile),
411 '', 432 '',
412 '')) 433 ''))
413 434
414 # atom link 435 # atom link