This is an automated email from the ASF dual-hosted git repository. nreich pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push: new 18560c0 GEODE-4217: Add validation to CreateConnectionCommand (#1566) 18560c0 is described below commit 18560c0c45f68601aa3cc6e6ddcaa7ba15f17be6 Author: Nick Reich <nre...@pivotal.io> AuthorDate: Wed Mar 7 08:54:57 2018 -0800 GEODE-4217: Add validation to CreateConnectionCommand (#1566) * Do not allow creation of connection if user is null but password is not --- .../jdbc/internal/cli/CreateConnectionCommand.java | 20 +++++++++++++++++++- .../cli/CreateConnectionCommandDUnitTest.java | 17 +++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java index c17e2f9..225a7f1 100644 --- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java +++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommand.java @@ -17,6 +17,7 @@ package org.apache.geode.connectors.jdbc.internal.cli; import java.util.List; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.Logger; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -29,6 +30,8 @@ import org.apache.geode.distributed.DistributedMember; import org.apache.geode.internal.logging.LogService; import org.apache.geode.management.cli.CliMetaData; import org.apache.geode.management.cli.Result; +import org.apache.geode.management.internal.cli.AbstractCliAroundInterceptor; +import org.apache.geode.management.internal.cli.GfshParseResult; import org.apache.geode.management.internal.cli.commands.GfshCommand; import org.apache.geode.management.internal.cli.functions.CliFunctionResult; import org.apache.geode.management.internal.cli.i18n.CliStrings; @@ -62,7 +65,8 @@ public class CreateConnectionCommand implements GfshCommand { private static final String ERROR_PREFIX = "ERROR: "; @CliCommand(value = CREATE_CONNECTION, help = CREATE_CONNECTION__HELP) - @CliMetaData(relatedTopic = CliStrings.DEFAULT_TOPIC_GEODE) + @CliMetaData(relatedTopic = CliStrings.DEFAULT_TOPIC_GEODE, + interceptor = "org.apache.geode.connectors.jdbc.internal.cli.CreateConnectionCommand$Interceptor") @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER, operation = ResourcePermission.Operation.MANAGE) public Result createConnection( @@ -142,4 +146,18 @@ public class CreateConnectionCommand implements GfshCommand { () -> getSharedConfiguration().addXmlEntity(xmlEntity, null)); } } + + public static class Interceptor extends AbstractCliAroundInterceptor { + @Override + public Result preExecution(GfshParseResult parseResult) { + String user = parseResult.getParamValueAsString(CREATE_CONNECTION__USER); + String password = parseResult.getParamValueAsString(CREATE_CONNECTION__PASSWORD); + + if (StringUtils.isNotBlank(password) && StringUtils.isBlank(user)) { + return ResultBuilder + .createUserErrorResult("need to specify a user if a password is specified."); + } + return ResultBuilder.createInfoResult(""); + } + } } diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java index 76c6bab..1019394 100644 --- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java +++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionCommandDUnitTest.java @@ -89,4 +89,21 @@ public class CreateConnectionCommandDUnitTest { .containsEntry("param2", "value2"); }); } + + @Test + public void doesNotCreateConnectionIfPasswordSpecifiedWithoutUser() throws Exception { + CommandStringBuilder csb = new CommandStringBuilder(CREATE_CONNECTION); + csb.addOption(CREATE_CONNECTION__NAME, "name"); + csb.addOption(CREATE_CONNECTION__URL, "url"); + csb.addOption(CREATE_CONNECTION__PASSWORD, "secret"); + csb.addOption(CREATE_CONNECTION__PARAMS, "param1:value1,param2:value2"); + + gfsh.executeAndAssertThat(csb.toString()).statusIsError(); + + locator.invoke(() -> { + String xml = InternalLocator.getLocator().getSharedConfiguration().getConfiguration("cluster") + .getCacheXmlContent(); + assertThat(xml).doesNotContain("jdbc:connector-service"); + }); + } } -- To stop receiving notification emails like this one, please contact nre...@apache.org.