You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/08/24 08:39:59 UTC
[camel] 01/02: Improved the Slack Verifier Extension after the
Slack Consumer has been implemented
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit d03f64f88631bedca07d16809dd9e6ac4d0ae115
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Aug 24 10:36:23 2018 +0200
Improved the Slack Verifier Extension after the Slack Consumer has been implemented
---
.../slack/SlackComponentVerifierExtension.java | 110 +++++++++++++++------
.../slack/SlackComponentVerifierExtensionTest.java | 58 ++++++++++-
.../camel/component/slack/SlackConsumerTest.java | 2 +-
3 files changed, 137 insertions(+), 33 deletions(-)
diff --git a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
index a4f3e88..0541f08 100644
--- a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
+++ b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
@@ -16,7 +16,14 @@
*/
package org.apache.camel.component.slack;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
@@ -24,12 +31,16 @@ import org.apache.camel.component.extension.verifier.ResultBuilder;
import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
import org.apache.camel.component.extension.verifier.ResultErrorHelper;
import org.apache.camel.component.slack.helper.SlackMessage;
+import org.apache.camel.util.ObjectHelper;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.message.BasicNameValuePair;
import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
public class SlackComponentVerifierExtension extends DefaultComponentVerifierExtension {
@@ -46,9 +57,14 @@ public class SlackComponentVerifierExtension extends DefaultComponentVerifierExt
// *********************************
@Override
protected Result verifyParameters(Map<String, Object> parameters) {
- ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS)
- .error(ResultErrorHelper.requiresOption("webhookUrl", parameters));
+ ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS);
+ if (ObjectHelper.isEmpty(parameters.get("token")) && ObjectHelper.isEmpty(parameters.get("webhookUrl"))) {
+ builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.GENERIC, "You must specify a webhookUrl (for producer) or a token (for consumer)").parameterKey("webhookUrl").parameterKey("token").build());
+ }
+ if (ObjectHelper.isNotEmpty(parameters.get("token")) && ObjectHelper.isNotEmpty(parameters.get("webhookUrl"))) {
+ builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.GENERIC, "You must specify a webhookUrl (for producer) or a token (for consumer). You can't specify both.").parameterKey("webhookUrl").parameterKey("token").build());
+ }
return builder.build();
}
@@ -57,45 +73,79 @@ public class SlackComponentVerifierExtension extends DefaultComponentVerifierExt
// *********************************
@Override
protected Result verifyConnectivity(Map<String, Object> parameters) {
- return ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY)
- .error(parameters, this::verifyCredentials).build();
+ return ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY).error(parameters, this::verifyCredentials).build();
}
private void verifyCredentials(ResultBuilder builder, Map<String, Object> parameters) {
- String webhookUrl = (String) parameters.get("webhookUrl");
+ String webhookUrl = (String)parameters.get("webhookUrl");
- try {
- HttpClient client = HttpClientBuilder.create().useSystemProperties().build();
- HttpPost httpPost = new HttpPost(webhookUrl);
+ if (ObjectHelper.isNotEmpty(webhookUrl)) {
- // Build Helper object
- SlackMessage slackMessage;
- slackMessage = new SlackMessage();
- slackMessage.setText("Test connection");
+ try {
+ HttpClient client = HttpClientBuilder.create().useSystemProperties().build();
+ HttpPost httpPost = new HttpPost(webhookUrl);
- // Set the post body
- String json = asJson(slackMessage);
- StringEntity body = new StringEntity(json);
+ // Build Helper object
+ SlackMessage slackMessage;
+ slackMessage = new SlackMessage();
+ slackMessage.setText("Test connection");
- // Do the post
- httpPost.setEntity(body);
+ // Set the post body
+ String json = asJson(slackMessage);
+ StringEntity body = new StringEntity(json);
- HttpResponse response = client.execute(httpPost);
+ // Do the post
+ httpPost.setEntity(body);
+
+ HttpResponse response = client.execute(httpPost);
- // 2xx is OK, anything else we regard as failure
- if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() > 299) {
- builder.error(ResultErrorBuilder
- .withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
- "Invalid webhookUrl")
- .parameterKey("webhookUrl").build());
+ // 2xx is OK, anything else we regard as failure
+ if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() > 299) {
+ builder
+ .error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, "Invalid webhookUrl").parameterKey("webhookUrl").build());
+ }
+ } catch (Exception e) {
+ builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, "Invalid webhookUrl").parameterKey("webhookUrl").build());
}
- } catch (Exception e) {
- builder.error(ResultErrorBuilder
- .withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
- "Invalid webhookUrl")
- .parameterKey("webhookUrl").build());
+ } else if (ObjectHelper.isNotEmpty((String)parameters.get("token"))) {
+ String token = (String)parameters.get("token");
+
+ try {
+ HttpClient client = HttpClientBuilder.create().useSystemProperties().build();
+ HttpPost httpPost = new HttpPost("https://slack.com/api/channels.list");
+
+ List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
+ params.add(new BasicNameValuePair("token", token));
+ httpPost.setEntity(new UrlEncodedFormEntity(params));
+
+ HttpResponse response = client.execute(httpPost);
+
+ String jsonString = readResponse(response.getEntity().getContent());
+ if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() > 299) {
+ builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, "Invalid token").parameterKey("token").build());
+ }
+ JSONParser parser = new JSONParser();
+ JSONObject obj = (JSONObject)parser.parse(jsonString);
+ if (obj.get("ok") != null && obj.get("ok").equals(false)) {
+ builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, "Invalid token").parameterKey("token").build());
+ }
+ } catch (Exception e) {
+ builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, "Invalid token").parameterKey("token").build());
+ }
+
+ }
+ }
+
+ private String readResponse(InputStream s) throws IOException, UnsupportedEncodingException {
+ ByteArrayOutputStream result = new ByteArrayOutputStream();
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = s.read(buffer)) != -1) {
+ result.write(buffer, 0, length);
}
+ String jsonString = result.toString(StandardCharsets.UTF_8.name());
+ return jsonString;
}
protected String asJson(SlackMessage message) {
@@ -111,4 +161,4 @@ public class SlackComponentVerifierExtension extends DefaultComponentVerifierExt
return JSONObject.toJSONString(jsonObject);
}
-}
\ No newline at end of file
+}
diff --git a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
index 74418c5..2b546b3 100644
--- a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
+++ b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
@@ -36,7 +36,7 @@ public class SlackComponentVerifierExtensionTest extends CamelTestSupport {
}
@Test
- public void testParameters() throws Exception {
+ public void testParametersWebhook() throws Exception {
Component component = context().getComponent("slack");
ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
@@ -48,9 +48,51 @@ public class SlackComponentVerifierExtensionTest extends CamelTestSupport {
Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
}
+
+ @Test
+ public void testParametersToken() throws Exception {
+ Component component = context().getComponent("slack");
+
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("token", "l");
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
+ }
+
+ @Test
+ public void testParametersEmpty() throws Exception {
+ Component component = context().getComponent("slack");
+
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ }
+
+ @Test
+ public void testParametersWebhookUrlTokenBoth() throws Exception {
+ Component component = context().getComponent("slack");
+
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("token", "l");
+ parameters.put("webhookUrl", "l");
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ }
@Test
- public void testConnectivity() throws Exception {
+ public void testConnectivityWebhook() throws Exception {
Component component = context().getComponent("slack");
ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
@@ -62,4 +104,16 @@ public class SlackComponentVerifierExtensionTest extends CamelTestSupport {
Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
}
+ @Test
+ public void testConnectivityToken() throws Exception {
+ Component component = context().getComponent("slack");
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("token", "l");
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ }
}
diff --git a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
index 21f393d..2a439cd 100644
--- a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
+++ b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
@@ -28,7 +28,7 @@ public class SlackConsumerTest extends CamelTestSupport {
@Test
public void testConsumePrefixedMessages() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedMessageCount(1);
+ mock.expectedMessageCount(9);
assertMockEndpointsSatisfied();
}