From 3a935822fc2c177a001fe6c47e48f9cb9192f3d0 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Tue, 25 Nov 2014 15:32:10 -0500 Subject: [PATCH] Fix PhantomJS by always using the local copy of CDN files, and making sure to specify TLS (instead of the default SSLv3, which is now deprecated) --- endpoints/common.py | 8 ++++++-- util/seo.py | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/endpoints/common.py b/endpoints/common.py index 4e8ceda07..15670b2ee 100644 --- a/endpoints/common.py +++ b/endpoints/common.py @@ -170,8 +170,12 @@ def render_page_template(name, **kwargs): main_scripts = ['dist/quay-frontend.min.js'] cache_buster = SAVED_CACHE_STRING - external_styles = get_external_css(local=not app.config.get('USE_CDN', True)) - external_scripts = get_external_javascript(local=not app.config.get('USE_CDN', True)) + use_cdn = app.config.get('USE_CDN', True) + if request.args.get('use_cdn') is not None: + use_cdn = request.args.get('use_cdn') == 'true' + + external_styles = get_external_css(local=not use_cdn) + external_scripts = get_external_javascript(local=not use_cdn) def get_oauth_config(): oauth_config = {} diff --git a/util/seo.py b/util/seo.py index b75480661..f33cf667f 100644 --- a/util/seo.py +++ b/util/seo.py @@ -1,16 +1,29 @@ import subprocess import logging +from urllib import urlencode +from urlparse import parse_qs, urlsplit, urlunsplit from bs4 import BeautifulSoup logger = logging.getLogger(__name__) +def set_query_parameter(url, param_name, param_value): + # From: http://stackoverflow.com/questions/4293460/how-to-add-custom-parameters-to-an-url-query-string-with-python + scheme, netloc, path, query_string, fragment = urlsplit(url) + query_params = parse_qs(query_string) + + query_params[param_name] = [param_value] + new_query_string = urlencode(query_params, doseq=True) + + return urlunsplit((scheme, netloc, path, new_query_string, fragment)) + def render_snapshot(url): logger.info('Snapshotting url: %s' % url) + url = set_query_parameter(url, 'use_cdn', False) out_html = subprocess.check_output(['phantomjs', '--ignore-ssl-errors=yes', - '--disk-cache=yes', + '--disk-cache=yes', '--ssl-protocol=tlsv1', 'util/phantomjs-runner.js', url]) if not out_html or out_html.strip() == 'Not Found':