Mercurial > libervia-web
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 |