From 5eee4e4b2fa92cc9095d7b859ba5409d254e45a4 Mon Sep 17 00:00:00 2001 From: Gu Jiawei Date: Thu, 2 Apr 2026 22:31:44 +0800 Subject: [PATCH 1/2] 1. change DemoAuthProvider fallback behavior to fit new plugin manager changes. --- .../bifromq/demo/plugin/DemoAuthProvider.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java b/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java index ecad8de73..4d7395b35 100644 --- a/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java +++ b/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java @@ -26,7 +26,7 @@ import org.apache.bifromq.plugin.authprovider.type.MQTT3AuthData; import org.apache.bifromq.plugin.authprovider.type.MQTT3AuthResult; import org.apache.bifromq.plugin.authprovider.type.MQTTAction; -import org.apache.bifromq.plugin.authprovider.type.Reject; +import org.apache.bifromq.plugin.authprovider.type.Ok; import org.apache.bifromq.type.ClientInfo; import org.pf4j.Extension; @@ -40,7 +40,7 @@ public DemoAuthProvider() { IAuthProvider delegate1; String webhookUrl = System.getProperty(PLUGIN_AUTHPROVIDER_URL); if (webhookUrl == null) { - log.info("No webhook url specified, the fallback behavior will reject all auth/check requests."); + log.info("No webhook url specified, the fallback behavior will grant all auth/check requests."); delegate1 = new FallbackAuthProvider(); } else { try { @@ -67,17 +67,16 @@ public CompletableFuture check(ClientInfo client, MQTTAction action) { static class FallbackAuthProvider implements IAuthProvider { @Override public CompletableFuture auth(MQTT3AuthData authData) { - return CompletableFuture.completedFuture( - MQTT3AuthResult.newBuilder().setReject(Reject.newBuilder() - .setCode(Reject.Code.Error) - .setReason("No webhook url for auth provider configured") - .build()) + return CompletableFuture.completedFuture(MQTT3AuthResult.newBuilder() + .setOk(Ok.newBuilder() + .setTenantId("DevOnly") + .setUserId("DevUser").build()) .build()); } @Override public CompletableFuture check(ClientInfo client, MQTTAction action) { - return CompletableFuture.completedFuture(false); + return CompletableFuture.completedFuture(true); } } } From 6bc8e1a0f66072f36748b2f59595af5cf92833c0 Mon Sep 17 00:00:00 2001 From: Gu Jiawei Date: Fri, 3 Apr 2026 21:22:06 +0800 Subject: [PATCH 2/2] 1. make fallback plugin completely align with dev only auth plugin; 2. add a checkPermission to avoid deletion override missing. --- .../bifromq/demo/plugin/DemoAuthProvider.java | 43 ++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java b/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java index 4d7395b35..4b2f8a53a 100644 --- a/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java +++ b/build/build-plugin-demo/src/main/java/org/apache/bifromq/demo/plugin/DemoAuthProvider.java @@ -23,6 +23,8 @@ import java.util.concurrent.CompletableFuture; import lombok.extern.slf4j.Slf4j; import org.apache.bifromq.plugin.authprovider.IAuthProvider; +import org.apache.bifromq.plugin.authprovider.type.CheckResult; +import org.apache.bifromq.plugin.authprovider.type.Granted; import org.apache.bifromq.plugin.authprovider.type.MQTT3AuthData; import org.apache.bifromq.plugin.authprovider.type.MQTT3AuthResult; import org.apache.bifromq.plugin.authprovider.type.MQTTAction; @@ -64,19 +66,50 @@ public CompletableFuture check(ClientInfo client, MQTTAction action) { return delegate.check(client, action); } + @Override + public CompletableFuture checkPermission(ClientInfo client, MQTTAction action) { + return delegate.checkPermission(client, action); + } + static class FallbackAuthProvider implements IAuthProvider { + private static final CheckResult GRANTED = CheckResult.newBuilder().setGranted( + Granted.getDefaultInstance()).build(); @Override public CompletableFuture auth(MQTT3AuthData authData) { - return CompletableFuture.completedFuture(MQTT3AuthResult.newBuilder() - .setOk(Ok.newBuilder() - .setTenantId("DevOnly") - .setUserId("DevUser").build()) - .build()); + if (!(authData.getUsername() == null || authData.getUsername().isEmpty())) { + String[] username = authData.getUsername().split("/"); + if (username.length == 2) { + return CompletableFuture.completedFuture(MQTT3AuthResult + .newBuilder() + .setOk(Ok.newBuilder() + .setTenantId(username[0]) + .setUserId(username[1]) + .build()) + .build()); + } else { + return CompletableFuture.completedFuture(MQTT3AuthResult.newBuilder() + .setOk(Ok.newBuilder() + .setTenantId("DevOnly") + .setUserId(authData.getUsername()).build()) + .build()); + } + } else { + return CompletableFuture.completedFuture(MQTT3AuthResult.newBuilder() + .setOk(Ok.newBuilder() + .setTenantId("DevOnly") + .setUserId("DevUser").build()) + .build()); + } } @Override public CompletableFuture check(ClientInfo client, MQTTAction action) { return CompletableFuture.completedFuture(true); } + + @Override + public CompletableFuture checkPermission(ClientInfo client, MQTTAction action) { + return CompletableFuture.completedFuture(GRANTED); + } } }