This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit b7810a9f19903372cb3f2975e5b55c712eeb2889 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Aug 9 11:42:38 2019 +0200 CAMEL-13845: camel-telegram - Do not show authorizationToken in uri. CAMEL-13847: camel-webhook - Should be lenient properties and fixed creating delegate uri with right set of parameters. --- .../src/main/docs/telegram-component.adoc | 8 ++-- .../component/telegram/TelegramComponent.java | 19 +++++++--- .../component/telegram/TelegramConfiguration.java | 32 +--------------- .../camel/component/telegram/TelegramEndpoint.java | 2 +- .../component/telegram/TelegramChatBotTest.java | 4 +- .../telegram/TelegramComponentParametersTest.java | 4 +- .../telegram/TelegramConfigurationTest.java | 3 +- .../telegram/TelegramConsumerChannelPostTest.java | 2 +- .../TelegramConsumerEmptyResponseTest.java | 2 +- .../TelegramConsumerFallbackConversionTest.java | 2 +- .../telegram/TelegramConsumerMappingTest.java | 2 +- .../TelegramConsumerMediaDocumentTest.java | 2 +- .../telegram/TelegramConsumerMediaPhotoTest.java | 2 +- .../telegram/TelegramConsumerMediaVideoTest.java | 2 +- .../telegram/TelegramConsumerMultipleTest.java | 2 +- .../telegram/TelegramConsumerServiceErrorTest.java | 2 +- .../telegram/TelegramConsumerSingleTest.java | 2 +- .../TelegramProducerChatIdResolutionTest.java | 2 +- .../telegram/TelegramProducerLocationTest.java | 2 +- .../telegram/TelegramProducerMediaTest.java | 2 +- .../telegram/TelegramWebhookCallTest.java | 2 +- .../telegram/TelegramWebhookRegistrationTest.java | 4 +- .../camel/component/webhook/WebhookComponent.java | 5 ++- .../camel/component/webhook/WebhookEndpoint.java | 5 +++ .../dsl/TelegramEndpointBuilderFactory.java | 44 ++++++++++++++++++++-- .../java/org/apache/camel/util/URISupport.java | 2 +- .../java/org/apache/camel/util/URISupportTest.java | 12 ++++-- examples/camel-example-telegram/README.adoc | 4 +- examples/camel-example-telegram/pom.xml | 6 ++- .../apache/camel/example/telegram/Application.java | 3 +- .../example/telegram/TelegramRouteBuilder.java | 4 +- 31 files changed, 111 insertions(+), 78 deletions(-) diff --git a/components/camel-telegram/src/main/docs/telegram-component.adoc b/components/camel-telegram/src/main/docs/telegram-component.adoc index ca5c81c..a373813 100644 --- a/components/camel-telegram/src/main/docs/telegram-component.adoc +++ b/components/camel-telegram/src/main/docs/telegram-component.adoc @@ -63,23 +63,22 @@ The Telegram component supports 3 options, which are listed below. The Telegram endpoint is configured using URI syntax: ---- -telegram:type/authorizationToken +telegram:type ---- with the following path and query parameters: -=== Path Parameters (2 parameters): +=== Path Parameters (1 parameters): [width="100%",cols="2,5,^1,2",options="header"] |=== | Name | Description | Default | Type | *type* | *Required* The endpoint type. Currently, only the 'bots' type is supported. | | String -| *authorizationToken* | *Required* The authorization token for using the bot (ask the BotFather) | | String |=== -=== Query Parameters (26 parameters): +=== Query Parameters (27 parameters): [width="100%",cols="2,5,^1,2",options="header"] @@ -111,6 +110,7 @@ with the following path and query parameters: | *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean | *proxyHost* (proxy) | HTTP proxy host which could be used when sending out the message. | | String | *proxyPort* (proxy) | HTTP proxy port which could be used when sending out the message. | | Integer +| *authorizationToken* (security) | *Required* The authorization token for using the bot (ask the BotFather) | | String |=== // endpoint options: END // spring-boot-auto-configure options: START diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramComponent.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramComponent.java index 7ef7232..1242b69 100644 --- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramComponent.java +++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramComponent.java @@ -24,9 +24,6 @@ import org.apache.camel.spi.annotations.Component; import org.apache.camel.support.DefaultComponent; import org.apache.camel.util.ObjectHelper; -/** - * The Camel component for Telegram. - */ @Component("telegram") public class TelegramComponent extends DefaultComponent { @@ -39,9 +36,21 @@ public class TelegramComponent extends DefaultComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { TelegramConfiguration configuration = new TelegramConfiguration(); + + // ignore trailing slash + if (remaining.endsWith("/")) { + remaining = remaining.substring(0, remaining.length() - 1); + } + + configuration.setType(remaining); + setProperties(configuration, parameters); - if (ObjectHelper.isNotEmpty(remaining)) { - configuration.updatePathConfig(remaining, this.getAuthorizationToken()); + if (configuration.getAuthorizationToken() == null) { + configuration.setAuthorizationToken(authorizationToken); + } + + if (configuration.getAuthorizationToken() == null) { + throw new IllegalArgumentException("AuthorizationToken must be configured on either component or endpoint for telegram: " + uri); } if (TelegramConfiguration.ENDPOINT_TYPE_BOTS.equals(configuration.getType())) { diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConfiguration.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConfiguration.java index bc34976..4e07e64 100644 --- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConfiguration.java +++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConfiguration.java @@ -33,7 +33,7 @@ public class TelegramConfiguration { @Metadata(required = true) private String type; - @UriPath(description = "The authorization token for using the bot (ask the BotFather)", label = "security", secret = true) + @UriParam(description = "The authorization token for using the bot (ask the BotFather)", label = "security", secret = true) @Metadata(required = true) private String authorizationToken; @@ -59,36 +59,6 @@ public class TelegramConfiguration { public TelegramConfiguration() { } - /** - * Sets the remaining configuration parameters available in the URI. - * - * @param remaining the URI part after the scheme - * @param defaultAuthorizationToken the default authorization token to use if not present in the URI - */ - public void updatePathConfig(String remaining, String defaultAuthorizationToken) { - String[] parts = remaining.split("/"); - if (parts.length == 0 || parts.length > 2) { - throw new IllegalArgumentException("Unexpected URI format. Expected 'bots' or 'bots/<authorizationToken>', found '" + remaining + "'"); - } - - String type = parts[0]; - if (!type.equals(ENDPOINT_TYPE_BOTS)) { - throw new IllegalArgumentException("Unexpected endpoint type. Expected 'bots', found '" + type + "'"); - } - - String authorizationToken = defaultAuthorizationToken; - if (parts.length > 1) { - authorizationToken = parts[1]; - } - - if (authorizationToken == null || authorizationToken.trim().length() == 0) { - throw new IllegalArgumentException("The authorization token must be provided and cannot be empty"); - } - - this.type = type; - this.authorizationToken = authorizationToken; - } - public String getType() { return type; } diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java index e3e662c..4396f6e 100644 --- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java +++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java @@ -39,7 +39,7 @@ import static org.apache.camel.component.telegram.util.TelegramMessageHelper.pop /** * The telegram component provides access to the <a href="https://core.telegram.org/bots/api">Telegram Bot API</a>. */ -@UriEndpoint(firstVersion = "2.18.0", scheme = "telegram", title = "Telegram", syntax = "telegram:type/authorizationToken", label = "chat") +@UriEndpoint(firstVersion = "2.18.0", scheme = "telegram", title = "Telegram", syntax = "telegram:type", label = "chat") public class TelegramEndpoint extends ScheduledPollEndpoint implements WebhookCapableEndpoint { private static final Logger LOG = LoggerFactory.getLogger(TelegramEndpoint.class); diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java index 0f46a13..fc97188 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java @@ -105,10 +105,10 @@ public class TelegramChatBotTest extends TelegramTestSupport { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .bean(TelegramChatBotTest.this, "chatBotProcess1") .bean(TelegramChatBotTest.this, "chatBotProcess2") - .to("telegram:bots/mock-token"); + .to("telegram:bots?authorizationToken=mock-token"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramComponentParametersTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramComponentParametersTest.java index 745bf49..a26e071 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramComponentParametersTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramComponentParametersTest.java @@ -31,10 +31,10 @@ public class TelegramComponentParametersTest extends TelegramTestSupport { TelegramEndpoint ep1 = (TelegramEndpoint) component.createEndpoint("telegram:bots"); assertEquals("DEFAULT", ep1.getConfiguration().getAuthorizationToken()); - TelegramEndpoint ep2 = (TelegramEndpoint) component.createEndpoint("telegram:bots/CUSTOM"); + TelegramEndpoint ep2 = (TelegramEndpoint) component.createEndpoint("telegram:bots?authorizationToken=CUSTOM"); assertEquals("CUSTOM", ep2.getConfiguration().getAuthorizationToken()); - TelegramEndpoint ep3 = (TelegramEndpoint) component.createEndpoint("telegram:bots/ANOTHER?chatId=123"); + TelegramEndpoint ep3 = (TelegramEndpoint) component.createEndpoint("telegram:bots?authorizationToken=ANOTHER&chatId=123"); assertEquals("ANOTHER", ep3.getConfiguration().getAuthorizationToken()); } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConfigurationTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConfigurationTest.java index 31925e4..8051eda 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConfigurationTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConfigurationTest.java @@ -26,7 +26,6 @@ import org.junit.Test; */ public class TelegramConfigurationTest extends TelegramTestSupport { - @Test public void testChatBotResult() throws Exception { TelegramEndpoint endpoint = (TelegramEndpoint) context().getEndpoints().stream().filter(e -> e instanceof TelegramEndpoint).findAny().get(); @@ -50,7 +49,7 @@ public class TelegramConfigurationTest extends TelegramTestSupport { public void configure() throws Exception { from("direct:telegram") - .to("telegram:bots/mock-token?chatId=12345&delay=2000&timeout=10&limit=60&proxyHost=127.0.0.1&proxyPort=1234"); + .to("telegram:bots/?authorizationToken=mock-token&chatId=12345&delay=2000&timeout=10&limit=60&proxyHost=127.0.0.1&proxyPort=1234"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java index d544ca7..32e0928 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java @@ -84,7 +84,7 @@ public class TelegramConsumerChannelPostTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .to("mock:telegram"); } }; diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java index a7bd949..6aeeab7 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java @@ -58,7 +58,7 @@ public class TelegramConsumerEmptyResponseTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token").to("mock:telegram"); + from("telegram:bots?authorizationToken=mock-token").to("mock:telegram"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerFallbackConversionTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerFallbackConversionTest.java index 8401b3e..1efe3bf 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerFallbackConversionTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerFallbackConversionTest.java @@ -66,7 +66,7 @@ public class TelegramConsumerFallbackConversionTest extends TelegramTestSupport @Override public void configure() throws Exception { from("direct:message") - .to("telegram:bots/mock-token?chatId=1234"); + .to("telegram:bots?authorizationToken=mock-token&chatId=1234"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java index 8df8568..611bcac 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java @@ -122,7 +122,7 @@ public class TelegramConsumerMappingTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token").to("mock:telegram"); + from("telegram:bots?authorizationToken=mock-token").to("mock:telegram"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java index 6c9cc5f..0efcdf3 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java @@ -79,7 +79,7 @@ public class TelegramConsumerMediaDocumentTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .to("mock:telegram"); } }; diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java index f124290..c1b678f 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java @@ -69,7 +69,7 @@ public class TelegramConsumerMediaPhotoTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .to("mock:telegram"); } }; diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java index 5e1b02a..a904eef 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java @@ -80,7 +80,7 @@ public class TelegramConsumerMediaVideoTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .to("mock:telegram"); } }; diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java index 98f8765..e694397 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java @@ -65,7 +65,7 @@ public class TelegramConsumerMultipleTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .convertBodyTo(String.class) .to("mock:telegram"); } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java index 8df6bf0..f6aa98d 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java @@ -68,7 +68,7 @@ public class TelegramConsumerServiceErrorTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .convertBodyTo(String.class) .to("mock:telegram"); } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java index c85378a..16ddb62 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java @@ -63,7 +63,7 @@ public class TelegramConsumerSingleTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("telegram:bots/mock-token") + from("telegram:bots?authorizationToken=mock-token") .convertBodyTo(String.class) .to("mock:telegram"); } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerChatIdResolutionTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerChatIdResolutionTest.java index af99e43..cec6081 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerChatIdResolutionTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerChatIdResolutionTest.java @@ -77,7 +77,7 @@ public class TelegramProducerChatIdResolutionTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("direct:telegram").to("telegram:bots/mock-token?chatId=my-id"); + from("direct:telegram").to("telegram:bots?authorizationToken=mock-token&chatId=my-id"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerLocationTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerLocationTest.java index 3dc6cbc..7ae0fb4 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerLocationTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerLocationTest.java @@ -110,7 +110,7 @@ public class TelegramProducerLocationTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() { - from("direct:telegram").to("telegram:bots/mock-token?chatId=my-id"); + from("direct:telegram").to("telegram:bots?authorizationToken=mock-token&chatId=my-id"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java index 413784f..873b56b 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java @@ -240,7 +240,7 @@ public class TelegramProducerMediaTest extends TelegramTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("direct:telegram").to("telegram:bots/mock-token?chatId=my-id"); + from("direct:telegram").to("telegram:bots?authorizationToken=mock-token&chatId=my-id"); } }; } diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookCallTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookCallTest.java index 738ff31..6c77784 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookCallTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookCallTest.java @@ -64,7 +64,7 @@ public class TelegramWebhookCallTest extends TelegramTestSupport { .host("localhost") .port(port); - from("webhook:telegram:bots/mock-token?webhookAutoRegister=false") + from("webhook:telegram:bots?authorizationToken=mock-token&webhookAutoRegister=false") .id("webhook") .convertBodyTo(String.class) .to("mock:endpoint"); diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookRegistrationTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookRegistrationTest.java index 026fad1..168d252 100644 --- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookRegistrationTest.java +++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramWebhookRegistrationTest.java @@ -40,7 +40,7 @@ public class TelegramWebhookRegistrationTest extends TelegramTestSupport { context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { - from("webhook:telegram:bots/mock-token").to("mock:endpoint"); + from("webhook:telegram:bots?authorizationToken=mock-token").to("mock:endpoint"); } }); context().start(); @@ -55,7 +55,7 @@ public class TelegramWebhookRegistrationTest extends TelegramTestSupport { context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { - from("webhook:telegram:bots/mock-token?webhookAutoRegister=false").to("mock:endpoint"); + from("webhook:telegram:bots?authorizationToken=mock-token&webhookAutoRegister=false").to("mock:endpoint"); } }); context().start(); diff --git a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java index 845011c..681fef4 100644 --- a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java +++ b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java @@ -24,6 +24,7 @@ import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.annotations.Component; import org.apache.camel.support.DefaultComponent; import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.URISupport; /** * A Camel meta-component for exposing other components through webhooks. @@ -51,8 +52,8 @@ public class WebhookComponent extends DefaultComponent { configuration.setRestConfiguration(restConfig); // we need to apply the params here - if (parameters != null && parameters.size() > 0) { - delegateUri = delegateUri + "?" + uri.substring(uri.indexOf('?') + 1); + if (parameters != null && !parameters.isEmpty()) { + delegateUri = delegateUri + "?" + URISupport.createQueryString(parameters); } configuration.setEndpointUri(delegateUri); diff --git a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookEndpoint.java b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookEndpoint.java index a1c0f63..a8fa0c0 100644 --- a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookEndpoint.java +++ b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookEndpoint.java @@ -97,4 +97,9 @@ public class WebhookEndpoint extends DefaultEndpoint implements DelegateEndpoint public WebhookCapableEndpoint getEndpoint() { return delegateEndpoint; } + + @Override + public boolean isLenientProperties() { + return true; + } } diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/TelegramEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/TelegramEndpointBuilderFactory.java index f04090b..698399d 100644 --- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/TelegramEndpointBuilderFactory.java +++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/TelegramEndpointBuilderFactory.java @@ -545,6 +545,19 @@ public interface TelegramEndpointBuilderFactory { setProperty("proxyPort", proxyPort); return this; } + /** + * The authorization token for using the bot (ask the BotFather). + * + * The option is a: <code>java.lang.String</code> type. + * + * Required: true + * Group: security + */ + default TelegramEndpointConsumerBuilder authorizationToken( + String authorizationToken) { + setProperty("authorizationToken", authorizationToken); + return this; + } } /** @@ -798,6 +811,19 @@ public interface TelegramEndpointBuilderFactory { setProperty("proxyPort", proxyPort); return this; } + /** + * The authorization token for using the bot (ask the BotFather). + * + * The option is a: <code>java.lang.String</code> type. + * + * Required: true + * Group: security + */ + default TelegramEndpointProducerBuilder authorizationToken( + String authorizationToken) { + setProperty("authorizationToken", authorizationToken); + return this; + } } /** @@ -906,6 +932,19 @@ public interface TelegramEndpointBuilderFactory { setProperty("proxyPort", proxyPort); return this; } + /** + * The authorization token for using the bot (ask the BotFather). + * + * The option is a: <code>java.lang.String</code> type. + * + * Required: true + * Group: security + */ + default TelegramEndpointBuilder authorizationToken( + String authorizationToken) { + setProperty("authorizationToken", authorizationToken); + return this; + } } /** @@ -976,14 +1015,11 @@ public interface TelegramEndpointBuilderFactory { * Available as of version: 2.18 * Maven coordinates: org.apache.camel:camel-telegram * - * Syntax: <code>telegram:type/authorizationToken</code> + * Syntax: <code>telegram:type</code> * * Path parameter: type (required) * The endpoint type. Currently, only the 'bots' type is supported. * The value can be one of: bots - * - * Path parameter: authorizationToken (required) - * The authorization token for using the bot (ask the BotFather) */ default TelegramEndpointBuilder telegram(String path) { class TelegramEndpointBuilderImpl extends AbstractEndpointBuilder implements TelegramEndpointBuilder, AdvancedTelegramEndpointBuilder { diff --git a/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java b/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java index a3c8f0c..b3dcc2b 100644 --- a/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java +++ b/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java @@ -39,7 +39,7 @@ public final class URISupport { // Match any key-value pair in the URI query string whose key contains // "passphrase" or "password" or secret key (case-insensitive). // First capture group is the key, second is the value. - private static final Pattern SECRETS = Pattern.compile("([?&][^=]*(?:passphrase|password|secretKey|accessToken|clientSecret)[^=]*)=(RAW[({].*[)}]|[^&]*)", Pattern.CASE_INSENSITIVE); + private static final Pattern SECRETS = Pattern.compile("([?&][^=]*(?:passphrase|password|secretKey|accessToken|clientSecret|authorizationToken)[^=]*)=(RAW[({].*[)}]|[^&]*)", Pattern.CASE_INSENSITIVE); // Match the user password in the URI as second capture group // (applies to URI with authority component and userinfo token in the form diff --git a/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java b/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java index 69340e1..ca23e2b 100644 --- a/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java +++ b/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java @@ -138,7 +138,7 @@ public class URISupportTest { } @Test - public void testParseParametersURLEncodeddValue() throws Exception { + public void testParseParametersURLEncodedValue() throws Exception { String out = URISupport.normalizeUri("http://www.google.com?q=S%C3%B8ren+Hansen"); URI uri = new URI(out); @@ -149,13 +149,13 @@ public class URISupportTest { } @Test - public void testNormalizeUriWhereParamererIsFaulty() throws Exception { + public void testNormalizeUriWhereParameterIsFaulty() throws Exception { String out = URISupport.normalizeUri("stream:uri?file:///d:/temp/data/log/quickfix.log&scanStream=true"); assertNotNull(out); } @Test - public void testCreateRemaingURI() throws Exception { + public void testCreateRemainingURI() throws Exception { URI original = new URI("http://camel.apache.org"); Map<String, Object> param = new HashMap<>(); param.put("foo", "123"); @@ -246,6 +246,12 @@ public class URISupportTest { } @Test + public void testSanitizeAuthorizationToken() throws Exception { + String out1 = URISupport.sanitizeUri("telegram:bots?authorizationToken=1234567890:AABBCOhEaqprrk6qqQtsSPFYS3Njgv2ljW2"); + assertEquals("telegram:bots?authorizationToken=xxxxxx", out1); + } + + @Test public void testSanitizeUriWithUserInfo() { String uri = "jt400://GEORGE:HARRISON@LIVERPOOL/QSYS.LIB/BEATLES.LIB/PENNYLANE.DTAQ"; String expected = "jt400://GEORGE:xxxxxx@LIVERPOOL/QSYS.LIB/BEATLES.LIB/PENNYLANE.DTAQ"; diff --git a/examples/camel-example-telegram/README.adoc b/examples/camel-example-telegram/README.adoc index 9f7fd23..e4b4734 100644 --- a/examples/camel-example-telegram/README.adoc +++ b/examples/camel-example-telegram/README.adoc @@ -1,8 +1,8 @@ -# Telegram API Example += Telegram API Example This example shows how to use Telegram API. -= How to run +== How to run You can run this example using diff --git a/examples/camel-example-telegram/pom.xml b/examples/camel-example-telegram/pom.xml index 4b02b39..41abfc0 100644 --- a/examples/camel-example-telegram/pom.xml +++ b/examples/camel-example-telegram/pom.xml @@ -45,9 +45,13 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-management-impl</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-telegram</artifactId> - <version>${camel.version}</version> </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> diff --git a/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/Application.java b/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/Application.java index cca64c4..ad82017 100644 --- a/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/Application.java +++ b/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/Application.java @@ -42,12 +42,13 @@ public final class Application { } private Application() { - + // noop } public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); context.start(); + context.addRoutes(new TelegramRouteBuilder()); context.addStartupListener(new TelegramExamplesRunner()); } diff --git a/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/TelegramRouteBuilder.java b/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/TelegramRouteBuilder.java index 350f226..2916a7d 100644 --- a/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/TelegramRouteBuilder.java +++ b/examples/camel-example-telegram/src/main/java/org/apache/camel/example/telegram/TelegramRouteBuilder.java @@ -19,8 +19,10 @@ package org.apache.camel.example.telegram; import org.apache.camel.builder.RouteBuilder; public class TelegramRouteBuilder extends RouteBuilder { + @Override public void configure() { - from("direct:start").to("telegram:bots/" + Application.AUTHORIZATION_TOKEN + "?chatId=" + Application.CHAT_ID); + from("direct:start") + .toF("telegram:bots/?authorizationToken=%s&chatId=%s", Application.AUTHORIZATION_TOKEN, Application.CHAT_ID); } }