diff --git a/cli/src/main/java/hudson/cli/CLI.java b/cli/src/main/java/hudson/cli/CLI.java index fa62fa5..87757e0 100644 --- a/cli/src/main/java/hudson/cli/CLI.java +++ b/cli/src/main/java/hudson/cli/CLI.java @@ -59,10 +59,15 @@ public class CLI { private final boolean ownsPool; public CLI(URL hudson) throws IOException, InterruptedException { - this(hudson,null); + this(hudson,null); } public CLI(URL hudson, ExecutorService exec) throws IOException, InterruptedException { + this(hudson,exec,null); + } + + public CLI(URL hudson, ExecutorService exec, String userInfo) throws IOException, InterruptedException { + String url = hudson.toExternalForm(); if(!url.endsWith("/")) url+='/'; @@ -87,7 +92,7 @@ public class CLI { url+="cli"; hudson = new URL(url); - FullDuplexHttpStream con = new FullDuplexHttpStream(hudson); + FullDuplexHttpStream con = new FullDuplexHttpStream(hudson, userInfo); channel = new Channel("Chunked connection to "+hudson, pool,con.getInputStream(),con.getOutputStream()); new PingThread(channel,30*1000) { @@ -172,7 +177,7 @@ public class CLI { if(args.isEmpty()) args = Arrays.asList("help"); // default to help - CLI cli = new CLI(new URL(url)); + CLI cli = new CLI(urlObj, null, urlObj.getUserInfo()); try { // execute the command // Arrays.asList is not serializable --- see 6835580 diff --git a/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java b/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java index 92787ce..4b583df 100644 --- a/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java +++ b/cli/src/main/java/hudson/cli/FullDuplexHttpStream.java @@ -32,8 +32,17 @@ public class FullDuplexHttpStream { } public FullDuplexHttpStream(URL target) throws IOException { + this(target,null); + } + + public FullDuplexHttpStream(URL target, String userInfo) throws IOException { this.target = target; + String authorization = null; + if (userInfo != null && @userInfo.isEmpty()) { + authorization = new sun.misc.BASE64Encoder().encode (userInfo.getBytes()); + } + CrumbData crumbData = new CrumbData(); UUID uuid = UUID.randomUUID(); // so that the server can correlate those two connections @@ -44,6 +53,10 @@ public class FullDuplexHttpStream { con.setRequestMethod("POST"); con.addRequestProperty("Session", uuid.toString()); con.addRequestProperty("Side","download"); + if (authorization != null) { + System.out.println("++++ Setting auth basic"); + con.addRequestProperty ("Authorization", "Basic " + authorization); + } if(crumbData.isValid) { con.addRequestProperty(crumbData.crumbName, crumbData.crumb); } @@ -61,6 +74,11 @@ public class FullDuplexHttpStream { con.setRequestProperty("Content-type","application/octet-stream"); con.addRequestProperty("Session", uuid.toString()); con.addRequestProperty("Side","upload"); + if (authorization != null) { + System.out.println("++++ Setting auth basic"); + con.addRequestProperty ("Authorization", "Basic " + authorization); + } + if(crumbData.isValid) { con.addRequestProperty(crumbData.crumbName, crumbData.crumb); }