Merged from 7.40.1.dev0

Properly URL-encode and -decode a bunch of query parameters. [from revision 19,981]
 - Legacy-Id: 19986
This commit is contained in:
Jennifer Richards 2022-02-24 17:52:28 +00:00
commit 077e7e2262
4 changed files with 16 additions and 16 deletions

View file

@ -8,6 +8,7 @@ import shutil
import os
import re
from unittest import skipIf
import urllib.parse
import django
from django.utils.text import slugify
@ -1725,7 +1726,7 @@ class AgendaTests(IetfSeleniumTestCase):
# Now select a different item from the select input
option.click()
try:
wait.until(in_iframe_href('tz=america/halifax', self.driver.find_element(By.CSS_SELECTOR, '#weekview iframe')))
wait.until(in_iframe_href(urllib.parse.quote('tz=america/halifax', safe='='), self.driver.find_element(By.CSS_SELECTOR, '#weekview iframe')))
except:
self.fail('iframe href not updated to contain selected time zone')
@ -1844,7 +1845,7 @@ class WeekviewTests(IetfSeleniumTestCase):
self.login()
for zone_name in zones_to_test:
zone = pytz.timezone(zone_name)
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=' + zone_name)
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=' + urllib.parse.quote(zone_name, safe=''))
for item in self.get_expected_items():
if item.session.name:
expected_name = item.session.name
@ -1947,7 +1948,7 @@ class WeekviewTests(IetfSeleniumTestCase):
self.login()
# Test in meeting local time
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=%s' % local_tz.lower())
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=%s' % urllib.parse.quote(local_tz.lower(), safe=''))
time_string = '-'.join([daytime_timeslot.local_start_time().strftime('%H%M'),
daytime_timeslot.local_end_time().strftime('%H%M')])

View file

@ -17,7 +17,7 @@ from pyquery import PyQuery
from lxml.etree import tostring
from io import StringIO, BytesIO
from bs4 import BeautifulSoup
from urllib.parse import urlparse, urlsplit
from urllib.parse import urlparse, urlsplit, quote
from PIL import Image
from pathlib import Path
@ -410,7 +410,7 @@ class MeetingTests(BaseMeetingTestCase):
self.assertTrue(all([x in unicontent(r) for x in ['redraw_weekview', 'draw_calendar', ]]))
# Specifying a time zone should not change the output (time zones are handled by the JS)
url = urlreverse("ietf.meeting.views.week_view",kwargs=dict(num=meeting.number)) + "?show=farfut&tz=Asia/Bangkok"
url = urlreverse("ietf.meeting.views.week_view",kwargs=dict(num=meeting.number)) + "?show=farfut&" + quote("tz=Asia/Bangkok", safe='=')
r_with_tz = self.client.get(url)
self.assertEqual(r_with_tz.status_code,200)
self.assertEqual(r.content, r_with_tz.content)

View file

@ -38,17 +38,16 @@ window.agenda_filter_for_testing; // methods to be accessed for automated testin
}
function parse_query_params(qs) {
var params = {};
qs = decodeURI(qs)
.replace(/^\?/, '')
.toLowerCase();
if (qs) {
var param_strs = qs.split('&');
for (var ii = 0; ii < param_strs.length; ii++) {
var toks = param_strs[ii].split('=', 2);
params[toks[0]] = toks[1] || true;
const urlSearchParams = new URLSearchParams(qs);
const params = Object.fromEntries(urlSearchParams.entries());
// the old code returned true for empty params, so do that, too
for (const property in params) {
if (params[property] === "") {
params[property] = true;
}
}
return params;
}

View file

@ -369,9 +369,9 @@
if (!weekview.hasClass('visually-hidden')) {
var queryparams = window.location.search;
if (queryparams) {
queryparams += '&tz=' + encodeURI(ietf_timezone.get_current_tz().toLowerCase());
queryparams += '&tz=' + encodeURIComponent(ietf_timezone.get_current_tz().toLowerCase());
} else {
queryparams = '?tz=' + encodeURI(ietf_timezone.get_current_tz().toLowerCase());
queryparams = '?tz=' + encodeURIComponent(ietf_timezone.get_current_tz().toLowerCase());
}
var new_url = 'week-view.html' + queryparams;
var wv_iframe = $(weekview).children('iframe');