You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/10/30 15:42:44 UTC
ignite git commit: IGNITE-9990 Control.sh utility should request a
password if necessary - Fixes #5079.
Repository: ignite
Updated Branches:
refs/heads/master 5397d67af -> a8713f6d5
IGNITE-9990 Control.sh utility should request a password if necessary - Fixes #5079.
Signed-off-by: Alexey Goncharuk <al...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a8713f6d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a8713f6d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a8713f6d
Branch: refs/heads/master
Commit: a8713f6d57ad3bf5eb9e568ffdcc6f6b88f8ebc9
Parents: 5397d67
Author: a-polyakov <po...@gmail.com>
Authored: Tue Oct 30 18:07:53 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Oct 30 18:42:14 2018 +0300
----------------------------------------------------------------------
.../ignite/internal/commandline/Arguments.java | 26 ++++-
.../internal/commandline/CommandHandler.java | 114 +++++++++++++------
.../commandline/CommandHandlerParsingTest.java | 22 +---
3 files changed, 102 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a8713f6d/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
index 5b8a0dc..6367eef 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
@@ -71,10 +71,10 @@ public class Arguments {
*/
private String walArgs;
- /** Ping timeout for grid client. See {@link GridClientConfiguration#pingTimeout}.*/
+ /** Ping timeout for grid client. See {@link GridClientConfiguration#pingTimeout}. */
private long pingTimeout;
- /** Ping interval for grid client. See {@link GridClientConfiguration#pingInterval}.*/
+ /** Ping interval for grid client. See {@link GridClientConfiguration#pingInterval}. */
private long pingInterval;
/**
@@ -94,8 +94,8 @@ public class Arguments {
* @param autoConfirmation Auto confirmation flag.
*/
public Arguments(Command cmd, String host, String port, String user, String pwd, String baselineAct,
- String baselineArgs, VisorTxTaskArg txArg, CacheArguments cacheArgs, String walAct, String walArgs,
- Long pingTimeout, Long pingInterval, boolean autoConfirmation) {
+ String baselineArgs, VisorTxTaskArg txArg, CacheArguments cacheArgs, String walAct, String walArgs,
+ Long pingTimeout, Long pingInterval, boolean autoConfirmation) {
this.cmd = cmd;
this.host = host;
this.port = port;
@@ -136,18 +136,32 @@ public class Arguments {
/**
* @return user name
*/
- public String user() {
+ public String getUserName() {
return user;
}
/**
+ * @param user New user name.
+ */
+ public void setUserName(String user) {
+ this.user = user;
+ }
+
+ /**
* @return password
*/
- public String password() {
+ public String getPassword() {
return pwd;
}
/**
+ * @param pwd New password.
+ */
+ public void setPassword(String pwd) {
+ this.pwd = pwd;
+ }
+
+ /**
* @return baseline action
*/
public String baselineAction() {
http://git-wip-us.apache.org/repos/asf/ignite/blob/a8713f6d/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
index c1853f8..167a806 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.commandline;
+import java.io.Console;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -117,6 +118,7 @@ import org.apache.ignite.internal.visor.verify.VisorViewCacheTaskResult;
import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.plugin.security.SecurityCredentials;
import org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider;
+import org.apache.ignite.plugin.security.SecurityCredentialsProvider;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND;
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
@@ -1855,12 +1857,6 @@ public class CommandHandler {
Command cmd = commands.get(0);
- boolean hasUsr = F.isEmpty(user);
- boolean hasPwd = F.isEmpty(pwd);
-
- if (hasUsr != hasPwd)
- throw new IllegalArgumentException("Both user and password should be specified");
-
return new Arguments(cmd, host, port, user, pwd, baselineAct, baselineArgs, txArgs, cacheArgs, walAct, walArgs,
pingTimeout, pingInterval, autoConfirmation);
}
@@ -2421,50 +2417,100 @@ public class CommandHandler {
clientCfg.setServers(Collections.singletonList(args.host() + ":" + args.port()));
- if (!F.isEmpty(args.user())) {
- clientCfg.setSecurityCredentialsProvider(
- new SecurityCredentialsBasicProvider(new SecurityCredentials(args.user(), args.password())));
- }
+ boolean tryConnectAgain = true;
- try (GridClient client = GridClientFactory.start(clientCfg)) {
- switch (args.command()) {
- case ACTIVATE:
- activate(client);
+ int tryConnectMaxCount=3;
- break;
+ while (tryConnectAgain) {
+ tryConnectAgain = false;
- case DEACTIVATE:
- deactivate(client);
+ if (!F.isEmpty(args.getUserName())) {
+ SecurityCredentialsProvider securityCredential = clientCfg.getSecurityCredentialsProvider();
- break;
+ if (securityCredential == null) {
+ securityCredential = new SecurityCredentialsBasicProvider(
+ new SecurityCredentials(args.getUserName(), args.getPassword())
+ );
- case STATE:
- state(client);
+ clientCfg.setSecurityCredentialsProvider(securityCredential);
+ }
+ final SecurityCredentials credential = securityCredential.credentials();
+ credential.setLogin(args.getUserName());
+ credential.setPassword(args.getPassword());
+ }
- break;
+ try (GridClient client = GridClientFactory.start(clientCfg)) {
+ switch (args.command()) {
+ case ACTIVATE:
+ activate(client);
- case BASELINE:
- baseline(client, args.baselineAction(), args.baselineArguments());
+ break;
- break;
+ case DEACTIVATE:
+ deactivate(client);
- case TX:
- transactions(client, args.transactionArguments());
+ break;
- break;
+ case STATE:
+ state(client);
- case CACHE:
- cache(client, args.cacheArgs());
+ break;
- break;
+ case BASELINE:
+ baseline(client, args.baselineAction(), args.baselineArguments());
- case WAL:
- wal(client, args.walAction(), args.walArguments());
+ break;
- break;
+ case TX:
+ transactions(client, args.transactionArguments());
+
+ break;
+
+ case CACHE:
+ cache(client, args.cacheArgs());
+
+ break;
+
+ case WAL:
+ wal(client, args.walAction(), args.walArguments());
+
+ break;
+ }
}
- }
+ catch (Throwable e) {
+ if (tryConnectMaxCount > 0 && isAuthError(e)) {
+ System.out.println("Authentication error, try connection again.");
+
+ final Console console = System.console();
+
+ if (console != null) {
+ if (F.isEmpty(args.getUserName()))
+ args.setUserName(console.readLine("user: "));
+
+ args.setPassword(new String(console.readPassword("password: ")));
+ }
+ else {
+ Scanner scanner = new Scanner(System.in);
+
+ if (F.isEmpty(args.getUserName())){
+ System.out.println("user: ");
+
+ args.setUserName(scanner.next());
+ }
+
+ System.out.println("password: ");
+
+ args.setPassword(scanner.next());
+ }
+
+ tryConnectAgain = true;
+ tryConnectMaxCount--;
+ }
+ else
+ throw e;
+ }
+ }
return EXIT_CODE_OK;
}
catch (IllegalArgumentException e) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/a8713f6d/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
index 0ac5d1a..988b1d7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
@@ -194,28 +194,10 @@ public class CommandHandlerParsingTest extends TestCase {
e.printStackTrace();
}
- try {
- hnd.parseAndValidate(asList("--user", "testUser", cmd.text()));
-
- fail("expected exception: Both user and password should be specified");
- }
- catch (IllegalArgumentException e) {
- e.printStackTrace();
- }
-
- try {
- hnd.parseAndValidate(asList("--password", "testPass", cmd.text()));
-
- fail("expected exception: Both user and password should be specified");
- }
- catch (IllegalArgumentException e) {
- e.printStackTrace();
- }
-
Arguments args = hnd.parseAndValidate(asList("--user", "testUser", "--password", "testPass", cmd.text()));
- assertEquals("testUser", args.user());
- assertEquals("testPass", args.password());
+ assertEquals("testUser", args.getUserName());
+ assertEquals("testPass", args.getPassword());
assertEquals(cmd, args.command());
}
}