You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by nr...@apache.org on 2018/03/07 16:55:00 UTC

[geode] branch develop updated: GEODE-4217: Add validation to CreateConnectionCommand (#1566)

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 <nr...@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
nreich@apache.org.