// (Copied from JGit org.eclipse.jgit.pgm.Main) // Copyright (C) 2006, Robin Rosenberg <robin.rosenberg@dewire.com> // Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> // // All rights reserved. // // Redistribution and use in source and binary forms, with or // without modification, are permitted provided that the following // conditions are met: // // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // - Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // // - Neither the name of the Eclipse Foundation, Inc. nor the // names of its contributors may be used to endorse or promote // products derived from this software without specific prior // written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND // CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package com.google.gerrit.pgm.util; import org.eclipse.jgit.util.CachedAuthenticator; import java.net.MalformedURLException; import java.net.URL; final class ProxyUtil { /** * Configure the JRE's standard HTTP based on <code>http_proxy</code>. * <p> * The popular libcurl library honors the <code>http_proxy</code> environment * variable as a means of specifying an HTTP proxy for requests made behind a * firewall. This is not natively recognized by the JRE, so this method can be * used by command line utilities to configure the JRE before the first * request is sent. * * @throws MalformedURLException the value in <code>http_proxy</code> is * unsupportable. */ static void configureHttpProxy() throws MalformedURLException { final String s = System.getenv("http_proxy"); if (s == null || s.equals("")) { return; } final URL u = new URL((s.indexOf("://") == -1) ? "http://" + s : s); if (!"http".equals(u.getProtocol())) { throw new MalformedURLException("Invalid http_proxy: " + s + ": Only http supported."); } final String proxyHost = u.getHost(); final int proxyPort = u.getPort(); System.setProperty("http.proxyHost", proxyHost); if (proxyPort > 0) { System.setProperty("http.proxyPort", String.valueOf(proxyPort)); } final String userpass = u.getUserInfo(); if (userpass != null && userpass.contains(":")) { final int c = userpass.indexOf(':'); final String user = userpass.substring(0, c); final String pass = userpass.substring(c + 1); CachedAuthenticator.add(new CachedAuthenticator.CachedAuthentication( proxyHost, proxyPort, user, pass)); } } ProxyUtil() { } }