|
@@ -23,6 +23,15 @@ import sys
|
|
|
import shutil
|
|
|
import tempfile
|
|
|
|
|
|
+try:
|
|
|
+ from urllib import quote as urlquote
|
|
|
+except ImportError:
|
|
|
+ from urllib.parse import quote as urlquote
|
|
|
+
|
|
|
+try:
|
|
|
+ import urlparse
|
|
|
+except ImportError:
|
|
|
+ import urllib.parse as urlparse
|
|
|
|
|
|
import dulwich
|
|
|
from dulwich import (
|
|
@@ -819,6 +828,28 @@ class HttpGitClientTests(TestCase):
|
|
|
h for h in c.opener.handlers if getattr(h, 'passwd', None) is not None]
|
|
|
self.assertEqual(0, len(pw_handler))
|
|
|
|
|
|
+ def test_from_parsedurl_on_url_with_quoted_credentials(self):
|
|
|
+ original_username = 'john|the|first'
|
|
|
+ quoted_username = urlquote(original_username)
|
|
|
+
|
|
|
+ original_password = 'Ya#1$2%3'
|
|
|
+ quoted_password = urlquote(original_password)
|
|
|
+
|
|
|
+ url = 'https://{username}:{password}@github.com/jelmer/dulwich'.format(
|
|
|
+ username=quoted_username,
|
|
|
+ password=quoted_password
|
|
|
+ )
|
|
|
+
|
|
|
+ c = HttpGitClient.from_parsedurl(urlparse.urlparse(url))
|
|
|
+ self.assertEqual(original_username, c._username)
|
|
|
+ self.assertEqual(original_password, c._password)
|
|
|
+ [pw_handler] = [
|
|
|
+ h for h in c.opener.handlers if getattr(h, 'passwd', None) is not None]
|
|
|
+ self.assertEqual(
|
|
|
+ (original_username, original_password),
|
|
|
+ pw_handler.passwd.find_user_password(
|
|
|
+ None, 'https://github.com/jelmer/dulwich'))
|
|
|
+
|
|
|
|
|
|
class TCPGitClientTests(TestCase):
|
|
|
|