Skip to content

Commit

Permalink
ant plugin, gradle plugin: add support for authenticated proxies (#1490)
Browse files Browse the repository at this point in the history
LP: #1682534

Bring ant and gradle up to par with maven plugin wrt. authenticated proxies. Fixes #1485 and re-fixes the linked LP bug.
  • Loading branch information
sparkiegeek authored and sergiusens committed Aug 17, 2017
1 parent 4b2f86d commit 4f1b531
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 9 deletions.
4 changes: 4 additions & 0 deletions snapcraft/plugins/ant.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ def get_proxy_options(self, scheme):
yield '-D{}.proxyHost={}'.format(scheme, parsed.hostname)
if parsed.port is not None:
yield '-D{}.proxyPort={}'.format(scheme, parsed.port)
if parsed.username is not None:
yield '-D{}.proxyUser={}'.format(scheme, parsed.username)
if parsed.password is not None:
yield '-D{}.proxyPassword={}'.format(scheme, parsed.password)

def env(self, root):
env = super().env(root)
Expand Down
9 changes: 7 additions & 2 deletions snapcraft/plugins/gradle.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,6 @@ def build(self):
snapcraft.file_utils.link_or_copy(src, dst, self.installdir))

def _get_proxy_options(self):
# XXX This doesn't yet support username and password.
# -- elopio - 2016-11-17
proxy_options = []
for var in ('http', 'https'):
proxy = os.environ.get('{}_proxy'.format(var), False)
Expand All @@ -124,4 +122,11 @@ def _get_proxy_options(self):
if parsed_url.port:
proxy_options.append(
'-D{}.proxyPort={}'.format(var, parsed_url.port))
if parsed_url.username:
proxy_options.append(
'-D{}.proxyUser={}'.format(var, parsed_url.username))
if parsed_url.password:
proxy_options.append(
'-D{}.proxyPassword={}'.format(
var, parsed_url.password))
return proxy_options
12 changes: 7 additions & 5 deletions snapcraft/tests/plugins/test_ant.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,17 +123,19 @@ def test_env(self):

def test_env_proxies(self):
env_vars = (
('http_proxy', 'http://localhost:3132'),
('https_proxy', 'http://localhost2:3133'),
('http_proxy', 'http://user:pass@localhost:3132'),
('https_proxy', 'http://user2:pass2@localhost2:3133'),
)
for v in env_vars:
self.useFixture(fixtures.EnvironmentVariable(v[0], v[1]))
for key, value in env_vars:
self.useFixture(fixtures.EnvironmentVariable(key, value))
plugin = ant.AntPlugin('test-part', self.options,
self.project_options)

env = plugin.env(plugin.partdir)
self.assertIn(
"ANT_OPTS='"
"-Dhttp.proxyHost=localhost -Dhttp.proxyPort=3132 "
"-Dhttps.proxyHost=localhost2 -Dhttps.proxyPort=3133'",
"-Dhttp.proxyUser=user -Dhttp.proxyPassword=pass "
"-Dhttps.proxyHost=localhost2 -Dhttps.proxyPort=3133 "
"-Dhttps.proxyUser=user2 -Dhttps.proxyPassword=pass2'",
env)
15 changes: 13 additions & 2 deletions snapcraft/tests/plugins/test_gradle.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,13 +217,25 @@ class GradleProxyTestCase(BaseGradlePluginTestCase):
env_var=('http_proxy', 'http://test_proxy:3000'),
expected_args=['-Dhttp.proxyHost=test_proxy',
'-Dhttp.proxyPort=3000'])),
('authenticated http proxy url', dict(
env_var=('http_proxy', 'http://user:pass@test_proxy:3000'),
expected_args=['-Dhttp.proxyHost=test_proxy',
'-Dhttp.proxyPort=3000',
'-Dhttp.proxyUser=user',
'-Dhttp.proxyPassword=pass'])),
('https proxy url', dict(
env_var=('https_proxy', 'https://test_proxy'),
expected_args=['-Dhttps.proxyHost=test_proxy'])),
('https proxy url and port', dict(
env_var=('https_proxy', 'https://test_proxy:3000'),
expected_args=['-Dhttps.proxyHost=test_proxy',
'-Dhttps.proxyPort=3000'])),
('authenticated https proxy url', dict(
env_var=('https_proxy', 'http://user:pass@test_proxy:3000'),
expected_args=['-Dhttps.proxyHost=test_proxy',
'-Dhttps.proxyPort=3000',
'-Dhttps.proxyUser=user',
'-Dhttps.proxyPassword=pass'])),
]

@mock.patch.object(gradle.GradlePlugin, 'run')
Expand All @@ -234,8 +246,7 @@ def test_build_with_http_proxy_gradle(self, run_mock):
self.project_options)

def side(l):
os.makedirs(os.path.join(plugin.builddir,
'build', 'libs'))
os.makedirs(os.path.join(plugin.builddir, 'build', 'libs'))
open(os.path.join(plugin.builddir,
'build', 'libs', 'dummy.war'), 'w').close()

Expand Down

0 comments on commit 4f1b531

Please # to comment.