From 305fbc79bcbf2d5506ada4272a2a349a82ad9997 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:11:36 +0100 Subject: [PATCH 01/13] add new configuration entity for allow-dollar-topics configuration --- .../mqtt/AllowDollarTopicsConfigEntity.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java diff --git a/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java b/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java new file mode 100644 index 000000000..755e3782d --- /dev/null +++ b/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java @@ -0,0 +1,32 @@ +/* + * Copyright 2019-present HiveMQ GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.hivemq.configuration.entity.mqtt; + +import com.hivemq.configuration.entity.EnabledEntity; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author Marcel Bartholet + * @since 2025.1 + */ +@XmlRootElement(name = "allow-dollar-topics") +@XmlAccessorType(XmlAccessType.NONE) +@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"}) +public class AllowDollarTopicsConfigEntity extends EnabledEntity { +} From 5d71374d36141d8e67c312787bc73a280972ae5a Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:12:01 +0100 Subject: [PATCH 02/13] add constant fpr default value for new config option --- .../configuration/entity/mqtt/MqttConfigurationDefaults.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java b/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java index 38c5356a3..09351f5fa 100644 --- a/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java +++ b/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java @@ -33,6 +33,7 @@ public class MqttConfigurationDefaults { public static final long MAX_EXPIRY_INTERVAL_DEFAULT = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE + 1; public static final boolean RETAINED_MESSAGES_ENABLED_DEFAULT = true; + public static final boolean MQTT_ALLOW_DOLLAR_TOPICS_DEFAULT = false; public static final QoS MAXIMUM_QOS_DEFAULT = QoS.EXACTLY_ONCE; From 84c3f4f5690c2fcc5c2b9ce9ccf3fdf96f24db13 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:12:47 +0100 Subject: [PATCH 03/13] extend MqttConfigurationService interface with getter and setter for new configuration option --- .../configuration/service/MqttConfigurationService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/hivemq/configuration/service/MqttConfigurationService.java b/src/main/java/com/hivemq/configuration/service/MqttConfigurationService.java index 33ce1600a..d83170118 100644 --- a/src/main/java/com/hivemq/configuration/service/MqttConfigurationService.java +++ b/src/main/java/com/hivemq/configuration/service/MqttConfigurationService.java @@ -96,6 +96,11 @@ public int getIndex() { */ boolean retainedMessagesEnabled(); + /** + * @return true if publishing to dollar topics is enabled, else false. Default false + */ + boolean allowDollarTopicsEnabled(); + /** * @return true if wildcard subscriptions are enabled, else false. Default true */ @@ -150,6 +155,8 @@ public int getIndex() { void setMaxMessageExpiryInterval(final long maxMessageExpiryInterval); void setRetainedMessagesEnabled(final boolean enabled); + + void setAllowDollarTopicsEnabled(final boolean enabled); void setWildcardSubscriptionsEnabled(final boolean enabled); From b1529d03bee03440356ea95302bb61c6ded722d9 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:13:27 +0100 Subject: [PATCH 04/13] add implementation for newly added interface methods --- .../service/impl/MqttConfigurationServiceImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java b/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java index 9a0978dc8..59f76648f 100644 --- a/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java +++ b/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java @@ -33,6 +33,7 @@ import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MAXIMUM_QOS_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MAX_EXPIRY_INTERVAL_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MAX_QUEUED_MESSAGES_DEFAULT; +import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MQTT_ALLOW_DOLLAR_TOPICS_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.QUEUED_MESSAGES_STRATEGY_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.RETAINED_MESSAGES_ENABLED_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.SERVER_RECEIVE_MAXIMUM_DEFAULT; @@ -64,6 +65,8 @@ public class MqttConfigurationServiceImpl implements MqttConfigurationService { private final AtomicBoolean retainedMessagesEnabled = new AtomicBoolean(RETAINED_MESSAGES_ENABLED_DEFAULT); + private final AtomicBoolean mqttAllowDollarTopics = new AtomicBoolean(MQTT_ALLOW_DOLLAR_TOPICS_DEFAULT); + private final AtomicBoolean wildcardSubscriptionsEnabled = new AtomicBoolean(WILDCARD_SUBSCRIPTIONS_ENABLED_DEFAULT); @@ -112,6 +115,9 @@ public boolean retainedMessagesEnabled() { return retainedMessagesEnabled.get(); } + @Override + public boolean allowDollarTopicsEnabled() { return mqttAllowDollarTopics.get(); } + @Override public boolean wildcardSubscriptionsEnabled() { return wildcardSubscriptionsEnabled.get(); @@ -189,6 +195,12 @@ public void setRetainedMessagesEnabled(final boolean enabled) { this.retainedMessagesEnabled.set(enabled); } + @Override + public void setAllowDollarTopicsEnabled(final boolean enabled) { + log.debug("Setting allow dollar topics enabled to {}", enabled); + this.mqttAllowDollarTopics.set(enabled); + } + @Override public void setWildcardSubscriptionsEnabled(final boolean enabled) { log.debug("Setting wildcard subscriptions enabled to {}", enabled); From 3c95c0afae7ff9b7cb016c3f218a6b8e5af03f85 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:15:08 +0100 Subject: [PATCH 05/13] add new config entity to MqttConfigEntity --- .../hivemq/configuration/entity/MqttConfigEntity.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/hivemq/configuration/entity/MqttConfigEntity.java b/src/main/java/com/hivemq/configuration/entity/MqttConfigEntity.java index e7c34ff45..c65330fed 100644 --- a/src/main/java/com/hivemq/configuration/entity/MqttConfigEntity.java +++ b/src/main/java/com/hivemq/configuration/entity/MqttConfigEntity.java @@ -15,6 +15,7 @@ */ package com.hivemq.configuration.entity; +import com.hivemq.configuration.entity.mqtt.AllowDollarTopicsConfigEntity; import com.hivemq.configuration.entity.mqtt.KeepAliveConfigEntity; import com.hivemq.configuration.entity.mqtt.MessageExpiryConfigEntity; import com.hivemq.configuration.entity.mqtt.PacketsConfigEntity; @@ -48,6 +49,9 @@ public class MqttConfigEntity { @XmlElementRef(required = false) private @NotNull RetainedMessagesConfigEntity retainedMessagesConfigEntity = new RetainedMessagesConfigEntity(); + @XmlElementRef(required = false) + private @NotNull AllowDollarTopicsConfigEntity allowDollarTopicsEntity = new AllowDollarTopicsConfigEntity(); + @XmlElementRef(required = false) private @NotNull WildcardSubscriptionsConfigEntity wildcardSubscriptionsConfigEntity = new WildcardSubscriptionsConfigEntity(); @@ -101,6 +105,11 @@ public class MqttConfigEntity { return retainedMessagesConfigEntity; } + public @NotNull AllowDollarTopicsConfigEntity getAllowDollarTopicConfigEntity() { + return allowDollarTopicsEntity; + } + + public @NotNull WildcardSubscriptionsConfigEntity getWildcardSubscriptionsConfigEntity() { return wildcardSubscriptionsConfigEntity; } From 99b95b1f06df3de429697dc28401f3ec2434b743 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:15:39 +0100 Subject: [PATCH 06/13] extend configuration test to cover new config option --- .../com/hivemq/configuration/reader/ConfigFileReaderTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/com/hivemq/configuration/reader/ConfigFileReaderTest.java b/src/test/java/com/hivemq/configuration/reader/ConfigFileReaderTest.java index ac43f22b6..b69dd6f1b 100644 --- a/src/test/java/com/hivemq/configuration/reader/ConfigFileReaderTest.java +++ b/src/test/java/com/hivemq/configuration/reader/ConfigFileReaderTest.java @@ -99,6 +99,8 @@ public void verify_mqtt_default_values() { .getMaxInterval()); verify(mqttConfigurationService).setRetainedMessagesEnabled(defaultMqttValues.getRetainedMessagesConfigEntity() .isEnabled()); + verify(mqttConfigurationService).setAllowDollarTopicsEnabled(defaultMqttValues.getAllowDollarTopicConfigEntity() + .isEnabled()); verify(mqttConfigurationService).setWildcardSubscriptionsEnabled(defaultMqttValues.getWildcardSubscriptionsConfigEntity() .isEnabled()); verify(mqttConfigurationService).setMaximumQos(QoS.valueOf(defaultMqttValues.getQoSConfigEntity().getMaxQos())); From ca7b6e31c3b19ce8528c90a8226d7b816fd487d4 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:16:02 +0100 Subject: [PATCH 07/13] remove internal configuration option --- .../hivemq/configuration/service/InternalConfigurations.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/hivemq/configuration/service/InternalConfigurations.java b/src/main/java/com/hivemq/configuration/service/InternalConfigurations.java index 8f0c22ef0..2dbd89cd4 100644 --- a/src/main/java/com/hivemq/configuration/service/InternalConfigurations.java +++ b/src/main/java/com/hivemq/configuration/service/InternalConfigurations.java @@ -394,8 +394,6 @@ public class InternalConfigurations { public static final AtomicInteger INTERVAL_BETWEEN_CLEANUP_JOBS_SEC = new AtomicInteger(4); - public static final AtomicBoolean MQTT_ALLOW_DOLLAR_TOPICS = new AtomicBoolean(false); - public static final AtomicInteger MQTT_EVENT_EXECUTOR_THREAD_COUNT = new AtomicInteger(AVAILABLE_PROCESSORS_TIMES_TWO); From 8a6559ffd818f3e374d74d0b20157789b3f7d0a2 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:17:16 +0100 Subject: [PATCH 08/13] add new config entry to MqttConfigurator --- .../java/com/hivemq/configuration/reader/MqttConfigurator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/hivemq/configuration/reader/MqttConfigurator.java b/src/main/java/com/hivemq/configuration/reader/MqttConfigurator.java index da94bf3f6..472f91cdc 100644 --- a/src/main/java/com/hivemq/configuration/reader/MqttConfigurator.java +++ b/src/main/java/com/hivemq/configuration/reader/MqttConfigurator.java @@ -52,6 +52,9 @@ void setMqttConfig(@NotNull final MqttConfigEntity mqttConfigEntity) { mqttConfigurationService.setRetainedMessagesEnabled(mqttConfigEntity.getRetainedMessagesConfigEntity() .isEnabled()); + mqttConfigurationService.setAllowDollarTopicsEnabled(mqttConfigEntity.getAllowDollarTopicConfigEntity() + .isEnabled()); + mqttConfigurationService.setWildcardSubscriptionsEnabled(mqttConfigEntity.getWildcardSubscriptionsConfigEntity() .isEnabled()); mqttConfigurationService.setSubscriptionIdentifierEnabled(mqttConfigEntity.getSubscriptionIdentifierConfigEntity() From b209b612f96ea0d287c18a758c3084495ca73e79 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:25:20 +0100 Subject: [PATCH 09/13] add wip placeholder for old internal configuration to satisfy compiler and pipeline --- .../handler/PluginAuthorizerServiceImpl.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java b/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java index 3b379293a..e38ab088e 100644 --- a/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java +++ b/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java @@ -15,12 +15,21 @@ */ package com.hivemq.extensions.handler; +import com.codahale.metrics.MetricRegistry; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import com.hivemq.bootstrap.ClientConnection; import com.hivemq.bootstrap.ClientConnectionContext; +import com.hivemq.configuration.ConfigurationBootstrap; +import com.hivemq.configuration.info.SystemInformation; +import com.hivemq.configuration.info.SystemInformationImpl; +import com.hivemq.configuration.ioc.ConfigurationModule; +import com.hivemq.configuration.reader.MqttConfigurator; +import com.hivemq.configuration.service.FullConfigurationService; +import com.hivemq.configuration.service.impl.ConfigurationServiceImpl; +import com.hivemq.configuration.service.impl.MqttConfigurationServiceImpl; import com.hivemq.extension.sdk.api.annotations.NotNull; import com.hivemq.extension.sdk.api.auth.parameter.AuthorizerProviderInput; import com.hivemq.extension.sdk.api.client.parameter.ServerInformation; @@ -63,8 +72,6 @@ import java.util.List; import java.util.Map; -import static com.hivemq.configuration.service.InternalConfigurations.MQTT_ALLOW_DOLLAR_TOPICS; - /** * @author Florian Limpöck * @since 4.1.0 @@ -102,7 +109,7 @@ public PluginAuthorizerServiceImpl( this.mqttServerDisconnector = mqttServerDisconnector; this.extensionPriorityComparator = new ExtensionPriorityComparator(hiveMQExtensions); this.incomingSubscribeService = incomingSubscribeService; - this.allowDollarTopics = MQTT_ALLOW_DOLLAR_TOPICS.get(); + this.allowDollarTopics = false; } public void authorizePublish(final @NotNull ChannelHandlerContext ctx, final @NotNull PUBLISH msg) { From 1a2bdd1856cc39f306b95fef689335090843dd52 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:46:20 +0100 Subject: [PATCH 10/13] rename field and constant --- .../entity/mqtt/MqttConfigurationDefaults.java | 2 +- .../service/impl/MqttConfigurationServiceImpl.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java b/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java index 09351f5fa..b91119846 100644 --- a/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java +++ b/src/main/java/com/hivemq/configuration/entity/mqtt/MqttConfigurationDefaults.java @@ -33,7 +33,7 @@ public class MqttConfigurationDefaults { public static final long MAX_EXPIRY_INTERVAL_DEFAULT = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE + 1; public static final boolean RETAINED_MESSAGES_ENABLED_DEFAULT = true; - public static final boolean MQTT_ALLOW_DOLLAR_TOPICS_DEFAULT = false; + public static final boolean ALLOW_DOLLAR_TOPICS_DEFAULT = false; public static final QoS MAXIMUM_QOS_DEFAULT = QoS.EXACTLY_ONCE; diff --git a/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java b/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java index 59f76648f..219758136 100644 --- a/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java +++ b/src/main/java/com/hivemq/configuration/service/impl/MqttConfigurationServiceImpl.java @@ -33,7 +33,7 @@ import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MAXIMUM_QOS_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MAX_EXPIRY_INTERVAL_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MAX_QUEUED_MESSAGES_DEFAULT; -import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.MQTT_ALLOW_DOLLAR_TOPICS_DEFAULT; +import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.ALLOW_DOLLAR_TOPICS_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.QUEUED_MESSAGES_STRATEGY_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.RETAINED_MESSAGES_ENABLED_DEFAULT; import static com.hivemq.configuration.entity.mqtt.MqttConfigurationDefaults.SERVER_RECEIVE_MAXIMUM_DEFAULT; @@ -65,7 +65,7 @@ public class MqttConfigurationServiceImpl implements MqttConfigurationService { private final AtomicBoolean retainedMessagesEnabled = new AtomicBoolean(RETAINED_MESSAGES_ENABLED_DEFAULT); - private final AtomicBoolean mqttAllowDollarTopics = new AtomicBoolean(MQTT_ALLOW_DOLLAR_TOPICS_DEFAULT); + private final AtomicBoolean allowDollarTopics = new AtomicBoolean(ALLOW_DOLLAR_TOPICS_DEFAULT); private final AtomicBoolean wildcardSubscriptionsEnabled = new AtomicBoolean(WILDCARD_SUBSCRIPTIONS_ENABLED_DEFAULT); @@ -116,7 +116,7 @@ public boolean retainedMessagesEnabled() { } @Override - public boolean allowDollarTopicsEnabled() { return mqttAllowDollarTopics.get(); } + public boolean allowDollarTopicsEnabled() { return allowDollarTopics.get(); } @Override public boolean wildcardSubscriptionsEnabled() { @@ -198,7 +198,7 @@ public void setRetainedMessagesEnabled(final boolean enabled) { @Override public void setAllowDollarTopicsEnabled(final boolean enabled) { log.debug("Setting allow dollar topics enabled to {}", enabled); - this.mqttAllowDollarTopics.set(enabled); + this.allowDollarTopics.set(enabled); } @Override From e5073058737c295d7701ef9df2264deb883d92f2 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:47:10 +0100 Subject: [PATCH 11/13] add MqttConfigurationService to injected arguments --- .../extensions/handler/PluginAuthorizerServiceImpl.java | 6 ++++-- .../extensions/handler/PluginAuthorizerServiceImplTest.java | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java b/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java index e38ab088e..935df29b0 100644 --- a/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java +++ b/src/main/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImpl.java @@ -28,6 +28,7 @@ import com.hivemq.configuration.ioc.ConfigurationModule; import com.hivemq.configuration.reader.MqttConfigurator; import com.hivemq.configuration.service.FullConfigurationService; +import com.hivemq.configuration.service.MqttConfigurationService; import com.hivemq.configuration.service.impl.ConfigurationServiceImpl; import com.hivemq.configuration.service.impl.MqttConfigurationServiceImpl; import com.hivemq.extension.sdk.api.annotations.NotNull; @@ -99,7 +100,8 @@ public PluginAuthorizerServiceImpl( final @NotNull HiveMQExtensions hiveMQExtensions, final @NotNull MqttServerDisconnector mqttServerDisconnector, final @NotNull IncomingPublishService incomingPublishService, - final @NotNull IncomingSubscribeService incomingSubscribeService) { + final @NotNull IncomingSubscribeService incomingSubscribeService, + final @NotNull MqttConfigurationService mqttConfigService) { this.authorizers = authorizers; this.asyncer = asyncer; @@ -109,7 +111,7 @@ public PluginAuthorizerServiceImpl( this.mqttServerDisconnector = mqttServerDisconnector; this.extensionPriorityComparator = new ExtensionPriorityComparator(hiveMQExtensions); this.incomingSubscribeService = incomingSubscribeService; - this.allowDollarTopics = false; + this.allowDollarTopics = mqttConfigService.allowDollarTopicsEnabled(); } public void authorizePublish(final @NotNull ChannelHandlerContext ctx, final @NotNull PUBLISH msg) { diff --git a/src/test/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImplTest.java b/src/test/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImplTest.java index acb2a39de..2fbdfb610 100644 --- a/src/test/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImplTest.java +++ b/src/test/java/com/hivemq/extensions/handler/PluginAuthorizerServiceImplTest.java @@ -20,6 +20,7 @@ import com.hivemq.bootstrap.ClientConnection; import com.hivemq.bootstrap.ClientConnectionContext; import com.hivemq.common.shutdown.ShutdownHooks; +import com.hivemq.configuration.service.MqttConfigurationService; import com.hivemq.extension.sdk.api.annotations.NotNull; import com.hivemq.extension.sdk.api.client.parameter.ServerInformation; import com.hivemq.extension.sdk.api.services.auth.provider.AuthorizerProvider; @@ -97,6 +98,7 @@ public class PluginAuthorizerServiceImplTest { private final @NotNull EventLog eventLog = mock(EventLog.class); private final @NotNull IncomingPublishService incomingPublishService = mock(IncomingPublishService.class); private final @NotNull PublishFlushHandler publishFlushHandler = mock(PublishFlushHandler.class); + private final @NotNull MqttConfigurationService mqttConfigService = mock(MqttConfigurationService.class); private @NotNull PluginTaskExecutor executor; private @NotNull EmbeddedChannel channel; @@ -139,7 +141,8 @@ public void setUp() throws Exception { hiveMQExtensions, mqttServerDisconnector, incomingPublishService, - incomingSubscribeService); + incomingSubscribeService, + mqttConfigService); eventsHandler = new CollectUserEventsHandler<>(AuthorizeWillResultEvent.class); channel.pipeline().addLast(eventsHandler); From 25bb497db899ab3e473dcf83b69cf1cda151d8c6 Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Thu, 13 Mar 2025 14:28:55 +0100 Subject: [PATCH 12/13] rename xml config option element --- .../entity/mqtt/AllowDollarTopicsConfigEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java b/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java index 755e3782d..66945027e 100644 --- a/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java +++ b/src/main/java/com/hivemq/configuration/entity/mqtt/AllowDollarTopicsConfigEntity.java @@ -25,7 +25,7 @@ * @author Marcel Bartholet * @since 2025.1 */ -@XmlRootElement(name = "allow-dollar-topics") +@XmlRootElement(name = "dollar-topic-publishing") @XmlAccessorType(XmlAccessType.NONE) @SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"}) public class AllowDollarTopicsConfigEntity extends EnabledEntity { From 6361b0e37639e3066f3ade91936e45b48322876b Mon Sep 17 00:00:00 2001 From: Marcel Bartholet <18328939+Z0rdak@users.noreply.github.com> Date: Thu, 13 Mar 2025 14:29:14 +0100 Subject: [PATCH 13/13] add config option to xsd --- src/main/resources/config.xsd | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/resources/config.xsd b/src/main/resources/config.xsd index ebb038aec..208a08d8e 100644 --- a/src/main/resources/config.xsd +++ b/src/main/resources/config.xsd @@ -198,6 +198,17 @@ + + + + + + Default: false + + + + +