From 297c2b9fdf1bad20518f0fdf09f75c81830dad9b Mon Sep 17 00:00:00 2001 From: kohsuke Date: Thu, 10 Jul 2008 06:43:03 +0000 Subject: [PATCH] [FIXED HUDSON-1833] Update center accepts HTTP proxy username/password. In 1.234. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@10737 71c3de6d-444a-0410-be80-ed276b4c234a --- core/src/main/java/hudson/PluginManager.java | 10 ++++- .../main/java/hudson/ProxyConfiguration.java | 39 +++++++++++++++++++ core/src/main/java/hudson/model/Hudson.java | 10 ----- .../main/java/hudson/model/UpdateCenter.java | 5 ++- .../hudson/PluginManager/advanced.jelly | 10 ++++- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index f3892c6b71..8cedec6041 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -218,7 +218,12 @@ public final class PluginManager extends AbstractModelObject { rsp.sendRedirect("../updateCenter/"); } - public void doProxyConfigure(@QueryParameter("proxy.server") String server, @QueryParameter("proxy.port") String port, StaplerResponse rsp) throws IOException { + public void doProxyConfigure( + @QueryParameter("proxy.server") String server, + @QueryParameter("proxy.port") String port, + @QueryParameter("proxy.userName") String userName, + @QueryParameter("proxy.password") String password, + StaplerResponse rsp) throws IOException { Hudson.getInstance().checkPermission(Hudson.ADMINISTER); Hudson hudson = Hudson.getInstance(); @@ -227,7 +232,8 @@ public final class PluginManager extends AbstractModelObject { hudson.proxy = null; ProxyConfiguration.getXmlFile().delete(); } else { - hudson.proxy = new ProxyConfiguration(server,Integer.parseInt(Util.fixEmptyAndTrim(port))); + hudson.proxy = new ProxyConfiguration(server,Integer.parseInt(Util.fixEmptyAndTrim(port)), + Util.fixEmptyAndTrim(userName),Util.fixEmptyAndTrim(password)); hudson.proxy.save(); } rsp.sendRedirect("./advanced"); diff --git a/core/src/main/java/hudson/ProxyConfiguration.java b/core/src/main/java/hudson/ProxyConfiguration.java index 2c57581941..ed9f4d03c5 100644 --- a/core/src/main/java/hudson/ProxyConfiguration.java +++ b/core/src/main/java/hudson/ProxyConfiguration.java @@ -3,24 +3,50 @@ package hudson; import com.thoughtworks.xstream.XStream; import hudson.model.Hudson; import hudson.util.XStream2; +import hudson.util.Scrambler; import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; +import java.net.URLConnection; +import java.net.URL; /** * HTTP proxy configuration. * + *

+ * Use {@link #open(URL)} to open a connection with the proxy setting. + * * @see Hudson#proxy */ public final class ProxyConfiguration { public final String name; public final int port; + /** + * Possibly null proxy user name and password. + * Password is base64 scrambled since this is persisted to disk. + */ + private final String userName,password; + public ProxyConfiguration(String name, int port) { + this(name,port,null,null); + } + + public ProxyConfiguration(String name, int port, String userName, String password) { this.name = name; this.port = port; + this.userName = userName; + this.password = Scrambler.scramble(password); + } + + public String getUserName() { + return userName; + } + + public String getPassword() { + return Scrambler.descramble(password); } public Proxy createProxy() { @@ -43,6 +69,19 @@ public final class ProxyConfiguration { return null; } + public static URLConnection open(URL url) throws IOException { + ProxyConfiguration p = Hudson.getInstance().proxy; + if(p==null) + return url.openConnection(); + + URLConnection con = url.openConnection(p.createProxy()); + if(p.getUserName()!=null) { + con.setRequestProperty("Proxy-Authorization","Basic "+ + Scrambler.scramble(p.getUserName()+':'+p.getPassword())); + } + return con; + } + private static final XStream XSTREAM = new XStream2(); static { diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index 40216a5c93..fc21ee03db 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -383,16 +383,6 @@ public final class Hudson extends View implements ItemGroup, Node, return slaveAgentPort; } - /** - * Obtains the {@link Proxy} instance to talk to other HTTP servers. - */ - public Proxy createProxy() { - if(proxy==null) - return Proxy.NO_PROXY; - else - return proxy.createProxy(); - } - /** * If you are calling this on Hudson something is wrong. * diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java index b9e85aa36b..82d939b56a 100644 --- a/core/src/main/java/hudson/model/UpdateCenter.java +++ b/core/src/main/java/hudson/model/UpdateCenter.java @@ -4,6 +4,7 @@ import hudson.Functions; import hudson.PluginManager; import hudson.PluginWrapper; import hudson.Util; +import hudson.ProxyConfiguration; import hudson.util.DaemonThreadFactory; import hudson.util.TextFile; import static hudson.util.TimeUnit2.DAYS; @@ -386,7 +387,7 @@ public class UpdateCenter implements ModelObject { } private void testConnection(URL url) throws IOException { - InputStream in = url.openConnection(Hudson.getInstance().createProxy()).getInputStream(); + InputStream in = ProxyConfiguration.open(url).getInputStream(); IOUtils.copy(in,new ByteArrayOutputStream()); in.close(); } @@ -426,7 +427,7 @@ public class UpdateCenter implements ModelObject { // In the future if we are to open up update center to 3rd party, we need more elaborate scheme // like signing to ensure the safety of the bits. - URLConnection con = new URL(plugin.url).openConnection(Hudson.getInstance().createProxy()); + URLConnection con = ProxyConfiguration.open(new URL(plugin.url)); int total = con.getContentLength(); CountingInputStream in = new CountingInputStream(con.getInputStream()); byte[] buf = new byte[8192]; diff --git a/core/src/main/resources/hudson/PluginManager/advanced.jelly b/core/src/main/resources/hudson/PluginManager/advanced.jelly index a6ae68bb6a..fbc1b11b50 100644 --- a/core/src/main/resources/hudson/PluginManager/advanced.jelly +++ b/core/src/main/resources/hudson/PluginManager/advanced.jelly @@ -14,13 +14,19 @@

${%HTTP Proxy Configuration}

- + - + + + + + + + -- GitLab