public: add header to skeleton requests with list of relevant pages (#17310)

This commit is contained in:
Frédéric Péters 2017-07-01 23:48:42 +02:00
parent 78a40f5d98
commit dfdc887569
1 changed files with 12 additions and 8 deletions

View File

@ -159,7 +159,10 @@ def skeleton(request):
if 'source' not in request.GET:
raise PermissionDenied()
source = request.GET['source']
netloc = urlparse.urlparse(source).netloc
selected_page = None
same_domain_pages = []
# look in redirect pages after the best match for the source
redirect_pages = Page.objects.exclude(redirect_url__isnull=True).exclude(redirect_url='')
@ -169,14 +172,12 @@ def skeleton(request):
if selected_page is None or len(redirect_url) > len(selected_page.get_redirect_url()):
selected_page = page
if selected_page is None:
# if there was no page found, look for a domain match
netloc = urlparse.urlparse(source).netloc
for page in redirect_pages:
redirect_url = utils.get_templated_url(page.redirect_url)
if urlparse.urlparse(redirect_url).netloc == netloc:
selected_page = page
break
if urlparse.urlparse(redirect_url).netloc == netloc:
same_domain_pages.append(page)
if selected_page is None and same_domain_pages:
# if there was no page found, get a domain match
selected_page = same_domain_pages[0]
if selected_page is None:
# if there's still no page found, look in KNOWN_SERVICES, and
@ -186,6 +187,7 @@ def skeleton(request):
service = settings.KNOWN_SERVICES[service_id][service_key]
if urlparse.urlparse(service.get('url')).netloc == netloc:
selected_page = Page()
selected_page.id = '__root'
selected_page.template_name = 'standard'
break
else:
@ -221,6 +223,8 @@ def skeleton(request):
template_name = combo_template['template']
response = render(request, template_name, ctx)
response['X-Combo-Page-Id'] = str(selected_page.id)
response['X-Combo-Skeleton-Pages'] = json.dumps(
dict([(x.id, utils.get_templated_url(x.redirect_url)) for x in same_domain_pages]))
return response