diff --git a/bots/cli/build.gradle b/bots/cli/build.gradle index 69f9eb55f..eceb45223 100644 --- a/bots/cli/build.gradle +++ b/bots/cli/build.gradle @@ -50,6 +50,7 @@ dependencies { implementation project(':ini') implementation project(':process') implementation project(':args') + implementation project(':proxy') testImplementation project(':test') } diff --git a/bots/cli/src/main/java/module-info.java b/bots/cli/src/main/java/module-info.java index a9043be25..0ce5ee4ef 100644 --- a/bots/cli/src/main/java/module-info.java +++ b/bots/cli/src/main/java/module-info.java @@ -29,6 +29,7 @@ requires org.openjdk.skara.json; requires org.openjdk.skara.args; requires org.openjdk.skara.process; + requires org.openjdk.skara.proxy; requires java.sql; diff --git a/bots/cli/src/main/java/org/openjdk/skara/bots/cli/BotLauncher.java b/bots/cli/src/main/java/org/openjdk/skara/bots/cli/BotLauncher.java index bb417ee19..be11b3015 100644 --- a/bots/cli/src/main/java/org/openjdk/skara/bots/cli/BotLauncher.java +++ b/bots/cli/src/main/java/org/openjdk/skara/bots/cli/BotLauncher.java @@ -26,6 +26,7 @@ import org.openjdk.skara.bot.*; import org.openjdk.skara.host.network.URIBuilder; import org.openjdk.skara.json.*; +import org.openjdk.skara.proxy.HttpProxy; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -109,6 +110,7 @@ private static JSONObject readConfiguration(Path jsonFile) { } public static void main(String... args) { + HttpProxy.setup(); var flags = List.of( Option.shortcut("t") diff --git a/buildSrc/proxy/src/main/java/org/openjdk/skara/gradle/proxy/ProxyPlugin.java b/buildSrc/proxy/src/main/java/org/openjdk/skara/gradle/proxy/ProxyPlugin.java index 19577ab4e..ae702ae82 100644 --- a/buildSrc/proxy/src/main/java/org/openjdk/skara/gradle/proxy/ProxyPlugin.java +++ b/buildSrc/proxy/src/main/java/org/openjdk/skara/gradle/proxy/ProxyPlugin.java @@ -27,6 +27,7 @@ import org.gradle.api.Project; import java.net.URI; +import java.net.URISyntaxException; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -38,10 +39,14 @@ public void apply(Project project) { value = value == null ? System.getenv(key.toUpperCase()) : value; if (value != null) { var protocol = key.split("_")[0]; - var uri = URI.create(value); - if (System.getProperty(protocol + ".proxyHost") == null) { - System.setProperty(protocol + ".proxyHost", uri.getHost()); - System.setProperty(protocol + ".proxyPort", String.valueOf(uri.getPort())); + try { + var uri = new URI(value); + if (System.getProperty(protocol + ".proxyHost") == null && uri.getHost() != null) { + System.setProperty(protocol + ".proxyHost", uri.getHost()); + System.setProperty(protocol + ".proxyPort", String.valueOf(uri.getPort())); + } + } catch (URISyntaxException e) { + // pass } } } diff --git a/cli/build.gradle b/cli/build.gradle index 3ad4654d1..8682cb664 100644 --- a/cli/build.gradle +++ b/cli/build.gradle @@ -38,6 +38,7 @@ dependencies { implementation project(':webrev') implementation project(':json') implementation project(':host') + implementation project(':proxy') } diff --git a/cli/src/main/java/module-info.java b/cli/src/main/java/module-info.java index e69a664cd..239c412a9 100644 --- a/cli/src/main/java/module-info.java +++ b/cli/src/main/java/module-info.java @@ -28,6 +28,7 @@ requires org.openjdk.skara.args; requires org.openjdk.skara.json; requires org.openjdk.skara.host; + requires org.openjdk.skara.proxy; requires java.net.http; requires java.logging; diff --git a/cli/src/main/java/org/openjdk/skara/cli/GitFork.java b/cli/src/main/java/org/openjdk/skara/cli/GitFork.java index 2e3bf7ca4..931d72ff1 100644 --- a/cli/src/main/java/org/openjdk/skara/cli/GitFork.java +++ b/cli/src/main/java/org/openjdk/skara/cli/GitFork.java @@ -25,6 +25,7 @@ import org.openjdk.skara.args.*; import org.openjdk.skara.host.*; import org.openjdk.skara.vcs.Repository; +import org.openjdk.skara.proxy.HttpProxy; import java.io.IOException; import java.net.URI; diff --git a/cli/src/main/java/org/openjdk/skara/cli/GitPr.java b/cli/src/main/java/org/openjdk/skara/cli/GitPr.java index 8d6eecc2a..7f4cdf041 100644 --- a/cli/src/main/java/org/openjdk/skara/cli/GitPr.java +++ b/cli/src/main/java/org/openjdk/skara/cli/GitPr.java @@ -26,6 +26,7 @@ import org.openjdk.skara.host.*; import org.openjdk.skara.vcs.*; import org.openjdk.skara.vcs.openjdk.*; +import org.openjdk.skara.proxy.HttpProxy; import java.io.IOException; import java.net.URI; diff --git a/proxy/build.gradle b/proxy/build.gradle new file mode 100644 index 000000000..b78885bb4 --- /dev/null +++ b/proxy/build.gradle @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +module { + name = 'org.openjdk.skara.proxy' + test { + requires 'org.junit.jupiter.api' + opens 'org.openjdk.skara.args' to 'org.junit.platform.commons' + } +} + +publishing { + publications { + proxy(MavenPublication) { + from components.java + } + } +} diff --git a/proxy/src/main/java/module-info.java b/proxy/src/main/java/module-info.java new file mode 100644 index 000000000..872696a43 --- /dev/null +++ b/proxy/src/main/java/module-info.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +module org.openjdk.skara.proxy { + exports org.openjdk.skara.proxy; +} diff --git a/cli/src/main/java/org/openjdk/skara/cli/HttpProxy.java b/proxy/src/main/java/org/openjdk/skara/proxy/HttpProxy.java similarity index 60% rename from cli/src/main/java/org/openjdk/skara/cli/HttpProxy.java rename to proxy/src/main/java/org/openjdk/skara/proxy/HttpProxy.java index 773a7dd31..a5d1528e9 100644 --- a/cli/src/main/java/org/openjdk/skara/cli/HttpProxy.java +++ b/proxy/src/main/java/org/openjdk/skara/proxy/HttpProxy.java @@ -20,30 +20,39 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.openjdk.skara.cli; +package org.openjdk.skara.proxy; -import java.util.List; import java.net.URI; +import java.net.URISyntaxException; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; -class HttpProxy { - static void setup() { +public class HttpProxy { + public static void setup() { for (var key : List.of("http_proxy", "https_proxy")) { var value = System.getenv(key); value = value == null ? System.getenv(key.toUpperCase()) : value; if (value != null) { var protocol = key.split("_")[0]; - var uri = URI.create(value); - System.setProperty(protocol + ".proxyHost", uri.getHost()); - System.setProperty(protocol + ".proxyPort", String.valueOf(uri.getPort())); + try { + var uri = new URI(value); + if (System.getProperty(protocol + ".proxyHost") == null && uri.getHost() != null) { + System.setProperty(protocol + ".proxyHost", uri.getHost()); + System.setProperty(protocol + ".proxyPort", String.valueOf(uri.getPort())); + } + } catch (URISyntaxException e) { + // pass + } } } var no_proxy = System.getenv("no_proxy"); no_proxy = no_proxy == null ? System.getenv("NO_PROXY") : no_proxy; - if (no_proxy != null) { - var hosts = no_proxy.replace(",", "|") - .replaceAll("^\\.", "*.") - .replaceAll("\\|\\.", "|*."); - System.setProperty("http.nonProxyHosts", hosts); + if (no_proxy != null && System.getProperty("http.nonProxyHosts") == null) { + var hosts = Arrays.stream(no_proxy.split(",")) + .map(s -> s.startsWith(".") ? "*" + s : s) + .collect(Collectors.toList()); + System.setProperty("http.nonProxyHosts", String.join("|", hosts)); } } } diff --git a/settings.gradle b/settings.gradle index 934b06088..7f28ddc8e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -34,6 +34,7 @@ include 'jcheck' include 'json' include 'mailinglist' include 'process' +include 'proxy' include 'storage' include 'test' include 'vcs'