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