Hi distro-tracker developers, Please review my patch for properly encoding the developer pages URL. The second file should not be applied, it just helped me while diving into distro-tracker. Regards, Christophe
diff --git a/distro_tracker/vendor/debian/rules.py b/distro_tracker/vendor/debian/rules.py index fd00fb2..18ce4b7 100644 --- a/distro_tracker/vendor/debian/rules.py +++ b/distro_tracker/vendor/debian/rules.py @@ -199,7 +199,7 @@ def get_developer_information_url(developer_email): developer, given his email. """ URL_TEMPLATE = 'http://qa.debian.org/developer.php?email={email}' - return URL_TEMPLATE.format(email=developer_email) + return URL_TEMPLATE.format(email=urllib.quote(developer_email)) def get_external_version_information_urls(package_name): @@ -225,7 +225,7 @@ def get_maintainer_extra(developer_email, package_name=None): """ The function returns a list of additional items that are to be included in the general panel next to the maintainer. This includes: - + - Whether the maintainer agrees with lowthreshold NMU - Whether the maintainer is a Debian Maintainer """ @@ -252,7 +252,7 @@ def get_uploader_extra(developer_email, package_name=None): """ The function returns a list of additional items that are to be included in the general panel next to an uploader. This includes: - + - Whether the uploader is a DebianMaintainer """ if package_name is None: diff --git a/distro_tracker/vendor/debian/tests.py b/distro_tracker/vendor/debian/tests.py index 710be8f..7207381 100644 --- a/distro_tracker/vendor/debian/tests.py +++ b/distro_tracker/vendor/debian/tests.py @@ -313,13 +313,13 @@ class GetDeveloperInformationSiteUrlTest(SimpleTestCase): """ developer_email = 'debian-dpkg@lists.debian.org' self.assertEqual( - 'http://qa.debian.org/developer.php?email=debian-dpkg@lists.debian.org', + 'http://qa.debian.org/developer.php?email=debian-dpkg%40lists.debian.org', get_developer_information_url(developer_email) ) developer_email = 'email@domain.com' self.assertEqual( - 'http://qa.debian.org/developer.php?email=email@domain.com', + 'http://qa.debian.org/developer.php?email=email%40domain.com', get_developer_information_url(developer_email) ) @@ -1317,7 +1317,7 @@ class DebianBugActionItemsTests(TestCase): # The item is of the correct type item = ActionItem.objects.all()[0] self.assertEqual( - item.item_type.type_name, + item.item_type.type_name, UpdatePackageBugStats.PATCH_BUG_ACTION_ITEM_TYPE_NAME) # The item references the correct package. self.assertEqual(item.package.name, self.package_name.name)
diff --git a/functional_tests/tests.py b/functional_tests/tests.py index baa8428..8208b52 100644 --- a/functional_tests/tests.py +++ b/functional_tests/tests.py @@ -30,6 +30,8 @@ from distro_tracker.core.models import PackageName from distro_tracker.core.models import Subscription from distro_tracker.core.models import TeamMembership from distro_tracker.core.panels import BasePanel +from distro_tracker.core.panels import PackageExtractedInfo +from distro_tracker.vendor.debian.rules import get_developer_information_url from selenium import webdriver from selenium.common.exceptions import NoSuchElementException @@ -38,6 +40,7 @@ from selenium.webdriver.common.keys import Keys from django.utils.six.moves import mock import os import time +import urllib class SeleniumTestCase(LiveServerTestCase): @@ -315,6 +318,29 @@ class PackagePageTest(SeleniumTestCase): column = self.browser.find_element_by_id('dtracker-package-right') self.assertIn("Hello, world", column.text) + def test_escape_email_charaters(self): + """ + Tests escaping characters in email address. + """ + self.contributor_email = "contributor+email@domain.net" + self.PackageExtractedInfo = PackageExtractedInfo.objects.create( + package=self.package, + key="general", + value='''{ + "name": "%s", + "maintainer": { + "name": "Maintainer", + "email": "%s", + "developer_info_url": "%s"} }''' % ( + self.package, + self.contributor_email, + get_developer_information_url(self.contributor_email))) + self.get_page(self.get_package_url(self.package.name)) + column = self.browser.find_element_by_id('dtracker-package-left') + self.assertIn( + urllib.quote(self.contributor_email), + column.get_attribute("innerHTML")) + User = get_user_model()
Attachment:
signature.asc
Description: Digital signature