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
+
+
+
+
+