You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/02/17 09:59:40 UTC
[30/50] [abbrv] ignite git commit: IGNITE-4520 Added credential
request for authentication on proxy.
IGNITE-4520 Added credential request for authentication on proxy.
(cherry picked from commit ef04f35)
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4d72bf8b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4d72bf8b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4d72bf8b
Branch: refs/heads/ignite-1.9
Commit: 4d72bf8bd47d87f846178f3c0e4e8df8b17d3094
Parents: 92ceb7f
Author: Andrey Novikov <an...@gridgain.com>
Authored: Wed Jan 25 13:58:57 2017 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Wed Feb 1 17:46:10 2017 +0700
----------------------------------------------------------------------
.../web-agent/bin/ignite-web-agent.bat | 4 +-
.../web-agent/bin/ignite-web-agent.sh | 2 +
.../ignite/console/agent/AgentLauncher.java | 90 ++++++++++++++++++--
3 files changed, 88 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/4d72bf8b/modules/web-console/web-agent/bin/ignite-web-agent.bat
----------------------------------------------------------------------
diff --git a/modules/web-console/web-agent/bin/ignite-web-agent.bat b/modules/web-console/web-agent/bin/ignite-web-agent.bat
index 8291b55..1f1b52d 100644
--- a/modules/web-console/web-agent/bin/ignite-web-agent.bat
+++ b/modules/web-console/web-agent/bin/ignite-web-agent.bat
@@ -60,7 +60,9 @@ if %ERRORLEVEL% equ 0 (
if "%JVM_OPTS%" == "" set JVM_OPTS=-Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxMetaspaceSize=256m
)
-"%JAVA_HOME%\bin\java.exe" %JVM_OPTS% -cp "*" org.apache.ignite.console.agent.AgentLauncher %*
+set JVM_OPTS=%JVM_OPTS% -Djava.net.useSystemProxies=true
+
+"%JAVA_HOME%\bin\java.exe" %JVM_OPTS% -cp "*" org.apache.ignite.console.agent.AgentLauncher %*
set JAVA_ERRORLEVEL=%ERRORLEVEL%
http://git-wip-us.apache.org/repos/asf/ignite/blob/4d72bf8b/modules/web-console/web-agent/bin/ignite-web-agent.sh
----------------------------------------------------------------------
diff --git a/modules/web-console/web-agent/bin/ignite-web-agent.sh b/modules/web-console/web-agent/bin/ignite-web-agent.sh
index 2e9f041..c2958fc 100644
--- a/modules/web-console/web-agent/bin/ignite-web-agent.sh
+++ b/modules/web-console/web-agent/bin/ignite-web-agent.sh
@@ -88,4 +88,6 @@ if [ -z "$JVM_OPTS" ] ; then
fi
fi
+JVM_OPTS="${JVM_OPTS} -Djava.net.useSystemProxies=true"
+
"$JAVA" ${JVM_OPTS} -cp "*" org.apache.ignite.console.agent.AgentLauncher "$@"
http://git-wip-us.apache.org/repos/asf/ignite/blob/4d72bf8b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/AgentLauncher.java
----------------------------------------------------------------------
diff --git a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/AgentLauncher.java b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/AgentLauncher.java
index 0c03d77..049791f 100644
--- a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/AgentLauncher.java
+++ b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/AgentLauncher.java
@@ -25,11 +25,15 @@ import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import java.io.File;
import java.io.IOException;
+import java.net.Authenticator;
import java.net.ConnectException;
+import java.net.PasswordAuthentication;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.net.UnknownHostException;
import java.util.Arrays;
+import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
@@ -76,9 +80,6 @@ public class AgentLauncher {
/** */
private static final String EVENT_AGENT_CLOSE = "agent:close";
- /** */
- private static final int RECONNECT_INTERVAL = 3000;
-
/**
* Create a trust manager that trusts all certificates It is not using a particular keyStore
*/
@@ -121,6 +122,15 @@ public class AgentLauncher {
System.exit(1);
}
+ ignore = X.cause(e, UnknownHostException.class);
+
+ if (ignore != null) {
+ log.error("Failed to establish connection to server, due to errors with DNS or missing proxy settings.");
+ log.error("Documentation for proxy configuration can be found here: http://apacheignite.readme.io/docs/web-agent#section-proxy-configuration");
+
+ System.exit(1);
+ }
+
ignore = X.cause(e, IOException.class);
if (ignore != null && "404".equals(ignore.getMessage())) {
@@ -129,6 +139,29 @@ public class AgentLauncher {
return;
}
+ if (ignore != null && "407".equals(ignore.getMessage())) {
+ log.error("Failed to establish connection to server, due to proxy requires authentication.");
+
+ String userName = System.getProperty("https.proxyUsername", System.getProperty("http.proxyUsername"));
+
+ if (userName == null || userName.trim().isEmpty())
+ userName = readLine("Enter proxy user name: ");
+ else
+ System.out.println("Read username from system properties: " + userName);
+
+ char[] pwd = readPassword("Enter proxy password: ");
+
+ final PasswordAuthentication pwdAuth = new PasswordAuthentication(userName, pwd);
+
+ Authenticator.setDefault(new Authenticator() {
+ @Override protected PasswordAuthentication getPasswordAuthentication() {
+ return pwdAuth;
+ }
+ });
+
+ return;
+ }
+
log.error("Connection error.", e);
}
}
@@ -144,6 +177,32 @@ public class AgentLauncher {
};
/**
+ * @param fmt Format string.
+ * @param args Arguments.
+ */
+ private static String readLine(String fmt, Object ... args) {
+ if (System.console() != null)
+ return System.console().readLine(fmt, args);
+
+ System.out.print(String.format(fmt, args));
+
+ return new Scanner(System.in).nextLine();
+ }
+
+ /**
+ * @param fmt Format string.
+ * @param args Arguments.
+ */
+ private static char[] readPassword(String fmt, Object ... args) {
+ if (System.console() != null)
+ return System.console().readPassword(fmt, args);
+
+ System.out.print(String.format(fmt, args));
+
+ return new Scanner(System.in).nextLine().toCharArray();
+ }
+
+ /**
* @param args Args.
*/
@SuppressWarnings("BusyWait")
@@ -214,9 +273,9 @@ public class AgentLauncher {
System.out.println("Security token is required to establish connection to the web console.");
System.out.println(String.format("It is available on the Profile page: https://%s/profile", webHost));
- System.out.print("Enter security tokens separated by comma: ");
+ String tokens = String.valueOf(readPassword("Enter security tokens separated by comma: "));
- cfg.tokens(Arrays.asList(System.console().readLine().trim().split(",")));
+ cfg.tokens(Arrays.asList(tokens.trim().split(",")));
}
final RestHandler restHnd = new RestHandler(cfg);
@@ -226,12 +285,29 @@ public class AgentLauncher {
URI uri = URI.create(cfg.serverUri());
+ // Create proxy authenticator using passed properties.
+ switch (uri.getScheme()) {
+ case "http":
+ case "https":
+ final String username = System.getProperty(uri.getScheme() + ".proxyUsername");
+ final char[] pwd = System.getProperty(uri.getScheme() + ".proxyPassword", "").toCharArray();
+
+ Authenticator.setDefault(new Authenticator() {
+ @Override protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(username, pwd);
+ }
+ });
+
+ break;
+
+ default:
+ // No-op.
+ }
+
IO.Options opts = new IO.Options();
opts.path = "/agents";
- opts.reconnectionDelay = RECONNECT_INTERVAL;
-
// Workaround for use self-signed certificate
if (Boolean.getBoolean("trust.all")) {
SSLContext ctx = SSLContext.getInstance("TLS");