diff --git a/.github/scripts/initial-setup.sh b/.github/scripts/initial-setup.sh index 1be4dfb624..b421a524e8 100755 --- a/.github/scripts/initial-setup.sh +++ b/.github/scripts/initial-setup.sh @@ -207,7 +207,7 @@ curl -ks -w "\n" -XPOST \ "contextLimit": null, "customHostnames":false, "staticAssets":false, - "teamBroker":true + "teamBroker":false }, "instances": { "'"$projectTypeId"'": { diff --git a/ci/ci-values.yaml b/ci/ci-values.yaml index 5139168996..af7ab08b27 100644 --- a/ci/ci-values.yaml +++ b/ci/ci-values.yaml @@ -4,6 +4,8 @@ forge: localPostgresql: true broker: enabled: true + teamBroker: + uiOnly: true cloudProvider: aws email: ses: diff --git a/docs/cloud/images/create-broker-client.png b/docs/cloud/images/create-broker-client.png index 651de591a9..3796bb33b0 100644 Binary files a/docs/cloud/images/create-broker-client.png and b/docs/cloud/images/create-broker-client.png differ diff --git a/docs/cloud/images/node-red-mqtt-connection.png b/docs/cloud/images/node-red-mqtt-connection.png new file mode 100644 index 0000000000..ac14a64395 Binary files /dev/null and b/docs/cloud/images/node-red-mqtt-connection.png differ diff --git a/docs/cloud/images/node-red-mqtt-security.png b/docs/cloud/images/node-red-mqtt-security.png new file mode 100644 index 0000000000..1bf448d515 Binary files /dev/null and b/docs/cloud/images/node-red-mqtt-security.png differ diff --git a/docs/cloud/introduction.md b/docs/cloud/introduction.md index a1d408500b..97e4b76a3b 100644 --- a/docs/cloud/introduction.md +++ b/docs/cloud/introduction.md @@ -188,9 +188,9 @@ platform. #### Enterprise Team Broker -Enterprise level teams come with their own MQTT broker. You can provision clients from the broker tab in the left hand menu. +Both Team and Enterprise level teams come with their own MQTT broker. You can provision clients from the broker tab in the left hand menu. -Teams can register up to 20 clients as part of their plan. The ability to purchase additional packs of clients will come in a future release. +Enterprise level Teams can register up to 20 and Teams level Teams can register up to 5 clients as part of their plan. The ability to purchase additional packs of clients will come in a near future release. The broker is available on `broker.flowfuse.cloud` and supports the following connection types: @@ -198,7 +198,7 @@ The broker is available on `broker.flowfuse.cloud` and supports the following co - MQTT over TLS on port `8883` - MQTT over secure WebSockets on port `443` - When creating clients you can specify a username, but it will prepended to the the Team's id e.g. `alice` will become `alice@abcd1234`. + When creating clients you can specify a username, but it will prepended to the the Team's id e.g. `alice` will become `alice@32E4NEO5pY`. Clients must also use the username as the MQTT Client ID in order to connect. ![Create Broker Client](./images/create-broker-client.png) @@ -206,9 +206,15 @@ The broker is available on `broker.flowfuse.cloud` and supports the following co e.g. ``` - mosquitto_sub -u "alice@abcd1234" -i "alice@abcd1234" -P "password" -h broker.flowfuse.cloud -t "#" + mosquitto_sub -u "alice@32E4NEO5pY" -i "alice@32E4NEO5pY" -P "password" -h broker.flowfuse.cloud -t "#" ``` + Or in Node-RED as follows + +![Node-RED MQTT Client Connection](./images/node-red-mqtt-connection.png) + +![Node-RED MQTT Client Security](./images/node-red-mqtt-security.png) + ### IP Addresses Outbound connections from FlowFuse will always come from the IP address `63.33.85.112`. diff --git a/docs/install/docker/README.md b/docs/install/docker/README.md index 129b58fe75..216d0411b4 100644 --- a/docs/install/docker/README.md +++ b/docs/install/docker/README.md @@ -57,8 +57,6 @@ meta: This guide walks you through detailed set up of FlowFuse Platform on a Docker container envoronment using Docker Compose. Typically suited for small/medium on premise deployments. By the end, you will have a fully functioning FlowFuse instance running in a Docker container. -For a FlowFuse platform evaluation purposes, check out our [Quick Start Guide](../../quick-start/README.md). - The following guide walks through a full production-ready deployment. If you want to install FlowFuse for evaluation purposes, please refer to the [Quick Start Guide](../../quick-start/README.md). ## Checklist diff --git a/forge/comms/v2AuthRoutes.js b/forge/comms/v2AuthRoutes.js index 398d3d814c..4f3b9b0eae 100644 --- a/forge/comms/v2AuthRoutes.js +++ b/forge/comms/v2AuthRoutes.js @@ -104,7 +104,7 @@ module.exports = async function (app) { const topic = request.body.topic const action = request.body.action if ((username.startsWith('device:') || - username.startsWith('platform:') || + username.startsWith('project:') || username.startsWith('frontend:') || username === 'forge_platform') && !username.includes('@')) { const acc = action === 'subscribe' ? 1 : 2 diff --git a/frontend/src/components/Accordion.vue b/frontend/src/components/Accordion.vue index eef260cba6..c90b028b7c 100644 --- a/frontend/src/components/Accordion.vue +++ b/frontend/src/components/Accordion.vue @@ -6,7 +6,7 @@
- +
diff --git a/frontend/src/components/TextCopier.vue b/frontend/src/components/TextCopier.vue index b793d0e57a..d5f7e5f5f4 100644 --- a/frontend/src/components/TextCopier.vue +++ b/frontend/src/components/TextCopier.vue @@ -13,6 +13,8 @@ + + diff --git a/frontend/src/pages/team/Broker/components/BrokerClient.vue b/frontend/src/pages/team/Broker/components/BrokerClient.vue new file mode 100644 index 0000000000..c41b264c33 --- /dev/null +++ b/frontend/src/pages/team/Broker/components/BrokerClient.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/frontend/src/pages/team/Broker/dialogs/AclItem.vue b/frontend/src/pages/team/Broker/dialogs/AclItem.vue index bbdcc1d89c..cf5c038352 100644 --- a/frontend/src/pages/team/Broker/dialogs/AclItem.vue +++ b/frontend/src/pages/team/Broker/dialogs/AclItem.vue @@ -1,7 +1,7 @@ @@ -42,12 +48,17 @@ export default { orderKey: { required: true, type: Number + }, + acls: { + required: true, + type: Array } }, emits: ['update:modelValue', 'remove-acl'], data () { return { model: { + id: '', action: '', pattern: '' }, @@ -69,16 +80,22 @@ export default { return this.hasActionError || this.hasPatternError }, canBeRemoved () { - return this.orderKey !== 0 + return this.acls.length > 1 } }, mounted () { + this.model.id = this.modelValue.id this.model.action = this.modelValue.action this.model.pattern = this.modelValue.pattern }, methods: { update () { this.$emit('update:modelValue', this.model) + }, + removeAcl () { + if (this.canBeRemoved) { + this.$emit('remove-acl', this.model) + } } } } diff --git a/frontend/src/pages/team/Broker/dialogs/ClientDialog.vue b/frontend/src/pages/team/Broker/dialogs/ClientDialog.vue index efd3f71a26..7dd9cf473b 100644 --- a/frontend/src/pages/team/Broker/dialogs/ClientDialog.vue +++ b/frontend/src/pages/team/Broker/dialogs/ClientDialog.vue @@ -38,8 +38,10 @@

Access Control Rules - - + + + +

@@ -50,12 +52,13 @@ Pattern
-