Procházet zdrojové kódy

Merge pull request #4178 from zmstone/resolve-conflict-v4.3.0-to-v5.0

Resolve conflict v4.3.0 to v5.0
Zaiming Shi před 5 roky
rodič
revize
4463ccf76c
100 změnil soubory, kde provedl 114 přidání a 122 odebrání
  1. 3 3
      .ci/compatibility_tests/docker-compose-pgsql-tls.yaml
  2. 3 9
      .github/workflows/run_cts_tests.yaml
  3. 1 1
      .gitignore
  4. 1 0
      Makefile
  5. 4 5
      apps/emqx_auth_http/src/emqx_auth_http_app.erl
  6. 7 7
      apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
  7. 3 3
      apps/emqx_auth_pgsql/priv/emqx_auth_pgsql.schema
  8. 18 18
      apps/emqx_bridge_mqtt/README.md
  9. 24 24
      apps/emqx_bridge_mqtt/docs/guide.rst
  10. 1 0
      apps/emqx_bridge_mqtt/etc/emqx_bridge_mqtt.conf
  11. 1 1
      apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema
  12. 9 12
      apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_actions.erl
  13. 1 4
      apps/emqx_coap/priv/emqx_coap.schema
  14. 2 5
      apps/emqx_exproto/test/emqx_exproto_SUITE.erl
  15. 1 0
      apps/emqx_stomp/etc/emqx_stomp.conf
  16. 6 7
      apps/emqx_web_hook/src/emqx_web_hook_actions.erl
  17. 6 7
      apps/emqx_web_hook/src/emqx_web_hook_app.erl
  18. 2 2
      bin/emqx
  19. 2 2
      bin/emqx_ctl
  20. 2 2
      elvis.config
  21. 8 6
      etc/emqx.conf
  22. 6 3
      get-dashboard.sh
  23. 0 0
      lib-opensource/emqx_dashboard/.gitignore
  24. 0 0
      lib-opensource/emqx_dashboard/README.md
  25. 2 1
      apps/emqx_dashboard/etc/emqx_dashboard.conf
  26. 0 0
      lib-opensource/emqx_dashboard/include/emqx_dashboard.hrl
  27. 0 0
      lib-opensource/emqx_dashboard/priv/emqx_dashboard.schema
  28. 0 0
      lib-opensource/emqx_dashboard/rebar.config
  29. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard.app.src
  30. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard.erl
  31. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard_admin.erl
  32. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard_api.erl
  33. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard_app.erl
  34. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard_cli.erl
  35. 0 0
      lib-opensource/emqx_dashboard/src/emqx_dashboard_sup.erl
  36. 0 0
      lib-opensource/emqx_dashboard/test/.placeholder
  37. 0 0
      lib-opensource/emqx_dashboard/test/emqx_dashboard_SUITE.erl
  38. 0 0
      lib-opensource/emqx_management/.gitignore
  39. 0 0
      lib-opensource/emqx_management/README.md
  40. 1 0
      apps/emqx_management/etc/emqx_management.conf
  41. 0 0
      lib-opensource/emqx_management/include/emqx_mgmt.hrl
  42. 0 0
      lib-opensource/emqx_management/priv/emqx_management.schema
  43. 0 0
      lib-opensource/emqx_management/rebar.config
  44. 0 0
      lib-opensource/emqx_management/src/emqx_management.app.src
  45. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt.erl
  46. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api.erl
  47. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_alarms.erl
  48. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_apps.erl
  49. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_banned.erl
  50. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_brokers.erl
  51. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_clients.erl
  52. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_data.erl
  53. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_listeners.erl
  54. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_metrics.erl
  55. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_modules.erl
  56. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_nodes.erl
  57. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_plugins.erl
  58. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_pubsub.erl
  59. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_routes.erl
  60. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_stats.erl
  61. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_subscriptions.erl
  62. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_api_topic_metrics.erl
  63. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_app.erl
  64. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_auth.erl
  65. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_cli.erl
  66. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_http.erl
  67. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_sup.erl
  68. 0 0
      lib-opensource/emqx_management/src/emqx_mgmt_util.erl
  69. 0 0
      lib-opensource/emqx_management/test/emqx_mgmt_SUITE.erl
  70. 0 0
      lib-opensource/emqx_management/test/emqx_mgmt_api_SUITE.erl
  71. 0 0
      lib-opensource/emqx_management/test/etc/emqx_management.conf
  72. 0 0
      lib-opensource/emqx_management/test/etc/emqx_reloader.conf
  73. 0 0
      lib-opensource/emqx_management/test/rfc6455_client.erl
  74. 0 0
      lib-opensource/emqx_rule_engine/.gitignore
  75. 0 0
      lib-opensource/emqx_rule_engine/README.md
  76. 0 0
      lib-opensource/emqx_rule_engine/docs/api_examples.md
  77. 0 0
      lib-opensource/emqx_rule_engine/docs/cli_examples.md
  78. 0 0
      lib-opensource/emqx_rule_engine/docs/design.md
  79. 0 0
      lib-opensource/emqx_rule_engine/etc/emqx_rule_engine.conf
  80. 0 0
      lib-opensource/emqx_rule_engine/include/rule_actions.hrl
  81. 0 0
      lib-opensource/emqx_rule_engine/include/rule_engine.hrl
  82. 0 0
      lib-opensource/emqx_rule_engine/priv/emqx_rule_engine.schema
  83. 0 0
      lib-opensource/emqx_rule_engine/rebar.config
  84. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_actions.erl
  85. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_actions_trans.erl
  86. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_engine.app.src
  87. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_engine.erl
  88. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_engine_api.erl
  89. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_engine_app.erl
  90. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_engine_cli.erl
  91. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_engine_sup.erl
  92. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_events.erl
  93. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_funcs.erl
  94. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_id.erl
  95. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_locker.erl
  96. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_maps.erl
  97. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_metrics.erl
  98. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_registry.erl
  99. 0 0
      lib-opensource/emqx_rule_engine/src/emqx_rule_runtime.erl
  100. 0 0
      apps/emqx_rule_engine/src/emqx_rule_sqlparser.erl

+ 3 - 3
.ci/compatibility_tests/docker-compose-pgsql-tls.yaml

@@ -24,9 +24,9 @@ services:
     image: emqx_pgsql:${PGSQL_TAG}
     restart: always
     environment:
-      POSTGRES_DB: postgres
-      POSTGRES_USER: postgres
-      POSTGRES_PASSWORD: postgres
+      POSTGRES_DB: mqtt
+      POSTGRES_USER: root
+      POSTGRES_PASSWORD: public
     ports:
       - "5432:5432"
     command:

+ 3 - 9
.github/workflows/run_cts_tests.yaml

@@ -194,15 +194,9 @@ jobs:
         run: |
           docker-compose -f .ci/compatibility_tests/docker-compose-pgsql-tls.yaml build --no-cache
           docker-compose -f .ci/compatibility_tests/docker-compose-pgsql-tls.yaml up -d
-          if [ "$PGSQL_TAG" = "12" ] || [ "$PGSQL_TAG" = "13" ]; then
-              sed -i 's|^[#[:space:]]*auth.pgsql.ssl.tls_versions[ \t]*=.*|auth.pgsql.ssl.tls_versions = "tlsv1.3,tlsv1.2"|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
-          else
-              sed -i 's|^[#[:space:]]*auth.pgsql.ssl.tls_versions[ \t]*=.*|auth.pgsql.ssl.tls_versions = "tlsv1.2,tlsv1.1"|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
-          fi
-
-          sed -i 's|^[#[:space:]]*auth.pgsql.username[ \t]*=.*|auth.pgsql.username = postgres|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
-          sed -i 's|^[#[:space:]]*auth.pgsql.password[ \t]*=.*|auth.pgsql.password = postgres|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
-          sed -i 's|^[#[:space:]]*auth.pgsql.database[ \t]*=.*|auth.pgsql.database = postgres|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
+          sed -i 's|^[#[:space:]]*auth.pgsql.username[ \t]*=.*|auth.pgsql.username = root|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
+          sed -i 's|^[#[:space:]]*auth.pgsql.password[ \t]*=.*|auth.pgsql.password = public|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
+          sed -i 's|^[#[:space:]]*auth.pgsql.database[ \t]*=.*|auth.pgsql.database = mqtt|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
           sed -i 's|^[#[:space:]]*auth.pgsql.ssl.enable[ \t]*=.*|auth.pgsql.ssl.enable = on|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
           sed -i 's|^[#[:space:]]*auth.pgsql.cacertfile[ \t]*=.*|auth.pgsql.cacertfile = /emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/root.crt|g' apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf
       - name: setup

+ 1 - 1
.gitignore

@@ -41,5 +41,5 @@ tmp/
 _packages
 elvis
 emqx_dialyzer_*_plt
-apps/emqx_dashboard/priv/www
+*/emqx_dashboard/priv/www
 dist.zip

+ 1 - 0
Makefile

@@ -2,6 +2,7 @@ REBAR_VERSION = 3.14.3-emqx-4
 DASHBOARD_VERSION = v4.3.0
 REBAR = $(CURDIR)/rebar3
 BUILD = $(CURDIR)/build
+export EMQX_ENTERPRISE=false
 export PKG_VSN ?= $(shell $(CURDIR)/pkg-vsn.sh)
 
 PROFILE ?= emqx

+ 4 - 5
apps/emqx_auth_http/src/emqx_auth_http_app.erl

@@ -74,11 +74,10 @@ translate_env(EnvName) ->
                                                         (_) ->
                                                         true
                                                     end, [{keyfile, KeyFile}, {certfile, CertFile}, {cacertfile, CACertFile}]),
-                            TlsVers = ['tlsv1.2','tlsv1.1',tlsv1],
-                            NTLSOpts = [{versions, TlsVers},
-                                        {ciphers, lists:foldl(fun(TlsVer, Ciphers) ->
-                                                                    Ciphers ++ ssl:cipher_suites(all, TlsVer)
-                                                                end, [], TlsVers)} | TLSOpts],
+                            NTLSOpts = [ {versions, emqx_tls_lib:default_versions()}
+                                       , {ciphers, emqx_tls_lib:default_ciphers()}
+                                       | TLSOpts
+                                       ],
                             [{transport, ssl}, {transport_opts, [Inet | NTLSOpts]}]
                         end,
             PoolOpts = [{host, Host},

+ 7 - 7
apps/emqx_auth_pgsql/etc/emqx_auth_pgsql.conf

@@ -22,7 +22,7 @@ auth.pgsql.username = root
 ## PostgreSQL password.
 ##
 ## Value: String
-# auth.pgsql.password =
+#auth.pgsql.password =
 
 ## PostgreSQL database.
 ##
@@ -39,13 +39,13 @@ auth.pgsql.encoding = utf8
 ## Value: on | off
 auth.pgsql.ssl.enable = off
 
-## TLS version
-## You can configure multi-version use "," split,
-## default value is :tlsv1.2
-## Example:
-##    tlsv1.1,tlsv1.2,tlsv1.3
+## TLS version.
 ##
-#auth.pgsql.ssl.tls_versions = tlsv1.2
+## Available enum values:
+##    tlsv1.3,tlsv1.2,tlsv1.1,tlsv1
+##
+## Value: String, seperated by ','
+#auth.pgsql.ssl.tls_versions = tlsv1.3,tlsv1.2,tlsv1.1
 
 ## SSL keyfile.
 ##

+ 3 - 3
apps/emqx_auth_pgsql/priv/emqx_auth_pgsql.schema

@@ -36,7 +36,7 @@
 ]}.
 
 {mapping, "auth.pgsql.ssl.tls_versions", "emqx_auth_pgsql.server", [
-  {default, "tlsv1.2"},
+  {default, "tlsv1.3,tlsv1.2,tlsv1.1"},
   {datatype, string}
 ]}.
 
@@ -92,9 +92,9 @@
   SslOpts = fun(Prefix) ->
                 Filter([{keyfile,    cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
                         {certfile,   cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
-                        {cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined),
+                        {cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)},
                         {versions, [list_to_existing_atom(Value)
-                                    ||Value <- string:tokens(cuttlefish:conf_get(Prefix ++ ".tls_versions", Conf), " ,")]}}])
+                                    || Value <- string:tokens(cuttlefish:conf_get(Prefix ++ ".tls_versions", Conf), " ,")]}])
             end,
 
   %% FIXME: compatible with 4.0-4.2 version format, plan to delete in 5.0

+ 18 - 18
apps/emqx_bridge_mqtt/README.md

@@ -53,13 +53,13 @@ The following is the basic configuration of RPC bridging. A simplest RPC bridgin
 
 ```
 ## Bridge Address: Use node name (nodename@host) for rpc bridging, and host:port for mqtt connection
-bridge.mqtt.emqx2.address = emqx2@192.168.1.2
+bridge.mqtt.emqx2.address = "emqx2@192.168.1.2"
 
 ## Forwarding topics of the message
-bridge.mqtt.emqx2.forwards = sensor1/#,sensor2/#
+bridge.mqtt.emqx2.forwards = "sensor1/#,sensor2/#"
 
 ## bridged mountpoint
-bridge.mqtt.emqx2.mountpoint = bridge/emqx2/${node}/
+bridge.mqtt.emqx2.mountpoint = "bridge/emqx2/${node}/"
 ```
 
 If the messages received by the local node emqx1 matches the topic `sersor1/#` or `sensor2/#`, these messages will be forwarded to the `sensor1/#` or `sensor2/#` topic of the remote node emqx2.
@@ -82,66 +82,66 @@ EMQ X MQTT bridging principle: Create an MQTT client on the EMQ X broker, and co
 
 ```
 ## Bridge Address: Use node name for rpc bridging, use host:port for mqtt connection
-bridge.mqtt.emqx2.address = 192.168.1.2:1883
+bridge.mqtt.emqx2.address = "192.168.1.2:1883"
 
 ## Bridged Protocol Version
 ## Enumeration value: mqttv3 | mqttv4 | mqttv5
-bridge.mqtt.emqx2.proto_ver = mqttv4
+bridge.mqtt.emqx2.proto_ver = "mqttv4"
 
 ## mqtt client's clientid
-bridge.mqtt.emqx2.clientid = bridge_emq
+bridge.mqtt.emqx2.clientid = "bridge_emq"
 
 ## mqtt client's clean_start field
 ## Note: Some MQTT Brokers need to set the clean_start value as `true`
 bridge.mqtt.emqx2.clean_start = true
 
 ##  mqtt client's username field
-bridge.mqtt.emqx2.username = user
+bridge.mqtt.emqx2.username = "user"
 
 ## mqtt client's password field
-bridge.mqtt.emqx2.password = passwd
+bridge.mqtt.emqx2.password = "passwd"
 
 ## Whether the mqtt client uses ssl to connect to a remote serve or not
 bridge.mqtt.emqx2.ssl = off
 
 ## CA Certificate of Client SSL Connection (PEM format)
-bridge.mqtt.emqx2.cacertfile = etc/certs/cacert.pem
+bridge.mqtt.emqx2.cacertfile = "etc/certs/cacert.pem"
 
 ## SSL certificate of Client SSL connection 
-bridge.mqtt.emqx2.certfile = etc/certs/client-cert.pem
+bridge.mqtt.emqx2.certfile = "etc/certs/client-cert.pem"
 
 ## Key file of Client SSL connection 
-bridge.mqtt.emqx2.keyfile = etc/certs/client-key.pem
+bridge.mqtt.emqx2.keyfile = "etc/certs/client-key.pem"
 
 ## SSL encryption
-bridge.mqtt.emqx2.ciphers = ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384
+bridge.mqtt.emqx2.ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384"
 
 ## TTLS PSK password
 ## Note 'listener.ssl.external.ciphers' and 'listener.ssl.external.psk_ciphers' cannot be configured at the same time
 ##
 ## See 'https://tools.ietf.org/html/rfc4279#section-2'.
-## bridge.mqtt.emqx2.psk_ciphers = PSK-AES128-CBC-SHA,PSK-AES256-CBC-SHA,PSK-3DES-EDE-CBC-SHA,PSK-RC4-SHA
+## bridge.mqtt.emqx2.psk_ciphers = "PSK-AES128-CBC-SHA,PSK-AES256-CBC-SHA,PSK-3DES-EDE-CBC-SHA,PSK-RC4-SHA"
 
 ## Client's heartbeat interval
 bridge.mqtt.emqx2.keepalive = 60s
 
 ## Supported TLS version
-bridge.mqtt.emqx2.tls_versions = tlsv1.2,tlsv1.1,tlsv1
+bridge.mqtt.emqx2.tls_versions = "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"
 
 ## Forwarding topics of the message
-bridge.mqtt.emqx2.forwards = sensor1/#,sensor2/#
+bridge.mqtt.emqx2.forwards = "sensor1/#,sensor2/#"
 
 ## Bridged mountpoint
-bridge.mqtt.emqx2.mountpoint = bridge/emqx2/${node}/
+bridge.mqtt.emqx2.mountpoint = "bridge/emqx2/${node}/"
 
 ## Subscription topic for bridging
-bridge.mqtt.emqx2.subscription.1.topic = cmd/topic1
+bridge.mqtt.emqx2.subscription.1.topic = "cmd/topic1"
 
 ## Subscription qos for bridging
 bridge.mqtt.emqx2.subscription.1.qos = 1
 
 ## Subscription topic for bridging
-bridge.mqtt.emqx2.subscription.2.topic = cmd/topic2
+bridge.mqtt.emqx2.subscription.2.topic = "cmd/topic2"
 
 ## Subscription qos for bridging
 bridge.mqtt.emqx2.subscription.2.qos = 1

+ 24 - 24
apps/emqx_bridge_mqtt/docs/guide.rst

@@ -39,7 +39,7 @@ In EMQ X, bridge is configured by modifying ``etc/emqx.conf``. EMQ X distinguish
 .. code-block::
 
    ## Bridge address: node name for local bridge, host:port for remote.
-   bridge.mqtt.aws.address = 127.0.0.1:1883
+   bridge.mqtt.aws.address = "127.0.0.1:1883"
 
 This configuration declares a bridge named ``aws`` and specifies that it is bridged to the MQTT broker of 127.0.0.1:1883 by MQTT mode.
 
@@ -69,13 +69,13 @@ The following is the basic configuration of RPC bridging. A simplest RPC bridgin
 .. code-block::
 
    ## Bridge Address: Use node name (nodename@host) for rpc bridging, and host:port for mqtt connection
-   bridge.mqtt.emqx2.address = emqx2@192.168.1.2
+   bridge.mqtt.emqx2.address = "emqx2@192.168.1.2"
 
    ## Forwarding topics of the message
-   bridge.mqtt.emqx2.forwards = sensor1/#,sensor2/#
+   bridge.mqtt.emqx2.forwards = "sensor1/#,sensor2/#"
 
    ## bridged mountpoint
-   bridge.mqtt.emqx2.mountpoint = bridge/emqx2/${node}/
+   bridge.mqtt.emqx2.mountpoint = "bridge/emqx2/${node}/"
 
 If the messages received by the local node emqx1 matches the topic ``sersor1/#`` or ``sensor2/#``\ , these messages will be forwarded to the ``sensor1/#`` or ``sensor2/#`` topic of the remote node emqx2.
 
@@ -86,10 +86,10 @@ If the messages received by the local node emqx1 matches the topic ``sersor1/#``
 Limitations of RPC bridging:
 
 
-#. 
+#.
    The RPC bridge of emqx can only forward local messages to the remote node, and cannot synchronize the messages of the remote node to the local node;
 
-#. 
+#.
    RPC bridge can only bridge two EMQ X broker together and cannot bridge EMQ X broker to other MQTT brokers.
 
 EMQ X MQTT Bridge Configuration
@@ -102,66 +102,66 @@ EMQ X MQTT bridging principle: Create an MQTT client on the EMQ X broker, and co
 .. code-block::
 
    ## Bridge Address: Use node name for rpc bridging, use host:port for mqtt connection
-   bridge.mqtt.emqx2.address = 192.168.1.2:1883
+   bridge.mqtt.emqx2.address = "192.168.1.2:1883"
 
    ## Bridged Protocol Version
    ## Enumeration value: mqttv3 | mqttv4 | mqttv5
-   bridge.mqtt.emqx2.proto_ver = mqttv4
+   bridge.mqtt.emqx2.proto_ver = "mqttv4"
 
    ## mqtt client's clientid
-   bridge.mqtt.emqx2.clientid = bridge_emq
+   bridge.mqtt.emqx2.clientid = "bridge_emq"
 
    ## mqtt client's clean_start field
    ## Note: Some MQTT Brokers need to set the clean_start value as `true`
    bridge.mqtt.emqx2.clean_start = true
 
    ##  mqtt client's username field
-   bridge.mqtt.emqx2.username = user
+   bridge.mqtt.emqx2.username = "user"
 
    ## mqtt client's password field
-   bridge.mqtt.emqx2.password = passwd
+   bridge.mqtt.emqx2.password = "passwd"
 
    ## Whether the mqtt client uses ssl to connect to a remote serve or not
    bridge.mqtt.emqx2.ssl = off
 
    ## CA Certificate of Client SSL Connection (PEM format)
-   bridge.mqtt.emqx2.cacertfile = etc/certs/cacert.pem
+   bridge.mqtt.emqx2.cacertfile = "etc/certs/cacert.pem"
 
    ## SSL certificate of Client SSL connection 
-   bridge.mqtt.emqx2.certfile = etc/certs/client-cert.pem
+   bridge.mqtt.emqx2.certfile = "etc/certs/client-cert.pem"
 
    ## Key file of Client SSL connection 
-   bridge.mqtt.emqx2.keyfile = etc/certs/client-key.pem
-
-   ## SSL encryption
-   bridge.mqtt.emqx2.ciphers = ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384
+   bridge.mqtt.emqx2.keyfile = "etc/certs/client-key.pem"
 
    ## TTLS PSK password
    ## Note 'listener.ssl.external.ciphers' and 'listener.ssl.external.psk_ciphers' cannot be configured at the same time
    ##
    ## See 'https://tools.ietf.org/html/rfc4279#section-2'.
-   ## bridge.mqtt.emqx2.psk_ciphers = PSK-AES128-CBC-SHA,PSK-AES256-CBC-SHA,PSK-3DES-EDE-CBC-SHA,PSK-RC4-SHA
+   ## bridge.mqtt.emqx2.psk_ciphers = "PSK-AES128-CBC-SHA,PSK-AES256-CBC-SHA,PSK-3DES-EDE-CBC-SHA,PSK-RC4-SHA"
 
    ## Client's heartbeat interval
    bridge.mqtt.emqx2.keepalive = 60s
 
    ## Supported TLS version
-   bridge.mqtt.emqx2.tls_versions = tlsv1.2,tlsv1.1,tlsv1
+   bridge.mqtt.emqx2.tls_versions = "tlsv1.2"
+
+   ## SSL encryption
+   bridge.mqtt.emqx2.ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384"
 
    ## Forwarding topics of the message
-   bridge.mqtt.emqx2.forwards = sensor1/#,sensor2/#
+   bridge.mqtt.emqx2.forwards = "sensor1/#,sensor2/#"
 
    ## Bridged mountpoint
-   bridge.mqtt.emqx2.mountpoint = bridge/emqx2/${node}/
+   bridge.mqtt.emqx2.mountpoint = "bridge/emqx2/${node}/"
 
    ## Subscription topic for bridging
-   bridge.mqtt.emqx2.subscription.1.topic = cmd/topic1
+   bridge.mqtt.emqx2.subscription.1.topic = "cmd/topic1"
 
    ## Subscription qos for bridging
    bridge.mqtt.emqx2.subscription.1.qos = 1
 
    ## Subscription topic for bridging
-   bridge.mqtt.emqx2.subscription.2.topic = cmd/topic2
+   bridge.mqtt.emqx2.subscription.2.topic = "cmd/topic2"
 
    ## Subscription qos for bridging
    bridge.mqtt.emqx2.subscription.2.qos = 1
@@ -190,7 +190,7 @@ The bridge of EMQ X has a message caching mechanism. The caching mechanism is ap
    bridge.mqtt.emqx2.queue.batch_bytes_limit = 1000MB
 
    ## The path for placing replayq queue. If it is not specified, then replayq will run in `mem-only` mode and messages will not be cached on disk.
-   bridge.mqtt.emqx2.queue.replayq_dir = data/emqx_emqx2_bridge/
+   bridge.mqtt.emqx2.queue.replayq_dir = "data/emqx_emqx2_bridge/"
 
    ## Replayq data segment size
    bridge.mqtt.emqx2.queue.replayq_seg_bytes = 10MB

+ 1 - 0
apps/emqx_bridge_mqtt/etc/emqx_bridge_mqtt.conf

@@ -128,6 +128,7 @@ bridge.mqtt.aws.keepalive = 60s
 
 ## TLS versions used by the bridge.
 ##
+## NOTE: Do not use tlsv1.3 if emqx is running on OTP-22 or earlier
 ## Value: String
 bridge.mqtt.aws.tls_versions = "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"
 

+ 1 - 1
apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema

@@ -90,7 +90,7 @@
 
 {mapping, "bridge.mqtt.$name.tls_versions", "emqx_bridge_mqtt.bridges", [
   {datatype, string},
-  {default, "tlsv1,tlsv1.1,tlsv1.2"}
+  {default, "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"}
 ]}.
 
 {mapping, "bridge.mqtt.$name.reconnect_interval", "emqx_bridge_mqtt.bridges", [

+ 9 - 12
apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_actions.erl

@@ -671,12 +671,6 @@ format_data([], Msg) ->
 format_data(Tokens, Msg) ->
     emqx_rule_utils:proc_tmpl(Tokens, Msg).
 
-tls_versions() ->
-    ['tlsv1.2','tlsv1.1', tlsv1].
-
-ciphers(Ciphers) ->
-    string:tokens(str(Ciphers), ", ").
-
 subscriptions(Subscriptions) ->
     scan_binary(<<"[", Subscriptions/binary, "].">>).
 
@@ -749,6 +743,8 @@ options(Options, PoolName) ->
                      Topic ->
                          [{subscriptions, [{Topic, Get(<<"qos">>)}]} | Subscriptions]
                  end,
+                 %% TODO check why only ciphers are configurable but not versions
+                 TlsVersions = emqx_tls_lib:default_versions(),
                  [{address, binary_to_list(Address)},
                   {bridge_mode, GetD(<<"bridge_mode">>, true)},
                   {clean_start, true},
@@ -761,12 +757,13 @@ options(Options, PoolName) ->
                   {proto_ver, mqtt_ver(Get(<<"proto_ver">>))},
                   {retry_interval, cuttlefish_duration:parse(str(GetD(<<"retry_interval">>, "30s")), s)},
                   {ssl, cuttlefish_flag:parse(str(Get(<<"ssl">>)))},
-                  {ssl_opts, [{versions, tls_versions()},
-                              {ciphers, ciphers(Get(<<"ciphers">>))},
-                              {keyfile, str(Get(<<"keyfile">>))},
-                              {certfile, str(Get(<<"certfile">>))},
-                              {cacertfile, str(Get(<<"cacertfile">>))}
-                             ]}] ++ Subscriptions1
+                  {ssl_opts, [ {keyfile, str(Get(<<"keyfile">>))}
+                             , {certfile, str(Get(<<"certfile">>))}
+                             , {cacertfile, str(Get(<<"cacertfile">>))}
+                             , {versions, TlsVersions}
+                             , {ciphers, emqx_tls_lib:integral_ciphers(TlsVersions, Get(<<"ciphers">>))}
+                             ]}
+                 ] ++ Subscriptions1
          end.
 
 

+ 1 - 4
apps/emqx_coap/priv/emqx_coap.schema

@@ -75,10 +75,7 @@ end}.
   Ciphers =
       case cuttlefish:conf_get("coap.dtls.ciphers", Conf, undefined) of
           undefined ->
-              lists:foldl(
-                  fun(TlsVer, Ciphers) ->
-                      Ciphers ++ ssl:cipher_suites(all, TlsVer)
-                  end, [], ['dtlsv1', 'dtlsv1.2']);
+              lists:append([ssl:cipher_suites(all, V, openssl) || V <- ['dtlsv1.2', 'dtlsv1']]);
           C ->
               SplitFun(C)
       end,

+ 2 - 5
apps/emqx_exproto/test/emqx_exproto_SUITE.erl

@@ -425,8 +425,8 @@ udp_opts() ->
 
 ssl_opts() ->
     Certs = certs("key.pem", "cert.pem", "cacert.pem"),
-    [{versions, ['tlsv1.2','tlsv1.1',tlsv1]},
-     {ciphers, ciphers('tlsv1.2')},
+    [{versions, emqx_tls_lib:default_versions()},
+     {ciphers, emqx_tls_lib:default_ciphers()},
      {verify, verify_peer},
      {fail_if_no_peer_cert, true},
      {secure_renegotiate, false},
@@ -437,9 +437,6 @@ dtls_opts() ->
     Opts = ssl_opts(),
     lists:keyreplace(versions, 1, Opts, {versions, ['dtlsv1.2', 'dtlsv1']}).
 
-ciphers(Version) ->
-    proplists:get_value(ciphers, emqx_ct_helpers:client_ssl(Version)).
-
 %%--------------------------------------------------------------------
 %% Client-Opts
 

+ 1 - 0
apps/emqx_stomp/etc/emqx_stomp.conf

@@ -58,6 +58,7 @@ stomp.listener.max_connections = 512
 ## TLS versions only to protect from POODLE attack.
 ##
 ## Value: String, seperated by ','
+## NOTE: Do not use tlsv1.3 if emqx is running on OTP-22 or earlier
 ## stomp.listener.tls_versions = "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"
 
 ## SSL Handshake timeout.

+ 6 - 7
apps/emqx_web_hook/src/emqx_web_hook_actions.erl

@@ -354,12 +354,11 @@ pool_opts(Params = #{<<"url">> := URL}) ->
                                                  (_) ->
                                                   true
                                               end, [{keyfile, KeyFile}, {certfile, CertFile}, {cacertfile, CACertFile}]),
-                       TlsVers = ['tlsv1.2', 'tlsv1.1', tlsv1],
-                       NTLSOpts = [{verify, VerifyType},
-                                   {versions, TlsVers},
-                                   {ciphers, lists:foldl(fun(TlsVer, Ciphers) ->
-                                                             Ciphers ++ ssl:cipher_suites(all, TlsVer)
-                                                         end, [], TlsVers)} | TLSOpts],
+                       NTLSOpts = [ {verify, VerifyType}
+                                  , {versions, emqx_tls_lib:default_versions()}
+                                  , {ciphers, emqx_tls_lib:default_ciphers()}
+                                  | TLSOpts
+                                  ],
                        [{transport, ssl}, {transport_opts, [Inet | NTLSOpts]}]
               end,
     [{host, Host},
@@ -397,4 +396,4 @@ test_http_connect(Conf) ->
         Err:Reason:ST ->
            ?LOG(error, "check http_connectivity failed: ~p, ~0p", [Conf, {Err, Reason, ST}]),
            false
-    end.
+    end.

+ 6 - 7
apps/emqx_web_hook/src/emqx_web_hook_app.erl

@@ -75,12 +75,11 @@ translate_env() ->
                        TLSOpts = lists:filter(fun({_K, V}) ->
                                                 V /= <<>> andalso V /= undefined andalso V /= "" andalso true
                                               end, [{keyfile, KeyFile}, {certfile, CertFile}, {cacertfile, CACertFile}]),
-                       TlsVers = ['tlsv1.2','tlsv1.1',tlsv1],
-                       NTLSOpts = [{verify, VerifyType},
-                                   {versions, TlsVers},
-                                   {ciphers, lists:foldl(fun(TlsVer, Ciphers) ->
-                                                               Ciphers ++ ssl:cipher_suites(all, TlsVer)
-                                                           end, [], TlsVers)} | TLSOpts],
+                       NTLSOpts = [ {verify, VerifyType}
+                                  , {versions, emqx_tls_lib:default_versions()}
+                                  , {ciphers, emqx_tls_lib:default_ciphers()}
+                                  | TLSOpts
+                                  ],
                        [{transport, ssl}, {transport_opts, [Inet | NTLSOpts]}]
                 end,
     PoolOpts = [{host, Host},
@@ -114,4 +113,4 @@ parse_host(Host) ->
                 {ok, _} -> {inet6, Host};
                 {error, _} -> {inet, Host}
             end
-    end.
+    end.

+ 2 - 2
bin/emqx

@@ -255,7 +255,7 @@ if [ -z "$NAME_ARG" ]; then
     # check if there is a node running, inspect its name
     # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
     [ -z "$NODENAME" ] && NODENAME=$(ps -ef | grep -E '\-progname\s.*emqx\s' | grep -o -E '\-name (\S*)' | awk '{print $2}')
-    [ -z "$NODENAME" ] && NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    [ -z "$NODENAME" ] && NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2- | tr -d '"')
     if [ -z "$NODENAME" ]; then
         echoerr "vm.args needs to have a -name parameter."
         echoerr "  -sname is not supported."
@@ -280,7 +280,7 @@ if [ -z "$COOKIE_ARG" ]; then
     # check if there is a node running, steal its cookie
     # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
     [ -z "$COOKIE" ] && COOKIE=$(ps -ef | grep -E '\-progname\s.*emqx\s' | grep -o -E '\-setcookie (\S*)' | awk '{print $2}')
-    [ -z "$COOKIE" ] && COOKIE=$(grep -E '^[ \t]*node.cookie[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    [ -z "$COOKIE" ] && COOKIE=$(grep -E '^[ \t]*node.cookie[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2- | tr -d '"')
     if [ -z "$COOKIE" ]; then
         echoerr "vm.args needs to have a -setcookie parameter."
         echoerr "please check $RUNNER_ETC_DIR/emqx.conf"

+ 2 - 2
bin/emqx_ctl

@@ -37,7 +37,7 @@ if [ -z "$NAME_ARG" ]; then
     # check if there is a node running, inspect its name
     # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
     [ -z "$NODENAME" ] && NODENAME=$(ps -ef | grep -E '\progname\s.*emqx\s' | grep -o -E '\-name (\S*)' | awk '{print $2}')
-    [ -z "$NODENAME" ] && NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    [ -z "$NODENAME" ] && NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2- | tr -d '"')
     if [ -z "$NODENAME" ]; then
         echoerr "vm.args needs to have a -name parameter."
         echoerr "  -sname is not supported."
@@ -58,7 +58,7 @@ if [ -z "$COOKIE_ARG" ]; then
     # check if there is a node running, steal its cookie
     # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
     [ -z "$COOKIE" ] && COOKIE=$(ps -ef | grep -E '\-progname\s.*emqx\s' | grep -o -E '\-setcookie (\S*)' | awk '{print $2}')
-    [ -z "$COOKIE" ] && COOKIE=$(grep -E '^[ \t]*node.cookie[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    [ -z "$COOKIE" ] && COOKIE=$(grep -E '^[ \t]*node.cookie[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2- | tr -d '"')
     if [ -z "$COOKIE" ]; then
         echoerr "vm.args needs to have a -setcookie parameter."
         echoerr "please check $RUNNER_ETC_DIR/emqx.conf"

+ 2 - 2
elvis.config

@@ -5,7 +5,7 @@
    [
     {config,
      [
-      #{dirs => ["apps/**/src", "src"],
+      #{dirs => ["src", "apps/**/src", "lib-opensource/**/src"],
         filter => "*.erl",
         ruleset => erl_files,
         rules => [
@@ -16,7 +16,7 @@
                                                                ]}}
            ]
         },
-      #{dirs => ["apps/**/test", "test"],
+      #{dirs => ["test", "apps/**/test", "lib-opensource/**/src"],
         filter => "*.erl",
         rules => [
            {elvis_text_style, line_length, #{ limit => 100

+ 8 - 6
etc/emqx.conf

@@ -184,12 +184,12 @@ cluster.autoclean = 5m
 ## Value: <name>@<host>
 ##
 ## Default: emqx@127.0.0.1
-node.name = emqx@127.0.0.1
+node.name = "emqx@127.0.0.1"
 
 ## Cookie for distributed node communication.
 ##
 ## Value: String
-node.cookie = emqxsecretcookie
+node.cookie = "emqxsecretcookie"
 
 ## Data dir for the node
 ##
@@ -1317,7 +1317,8 @@ listener.ssl.external.access.1 = "allow all"
 ## See: http://erlang.org/doc/man/ssl.html
 ##
 ## Value: String, seperated by ','
-## listener.ssl.external.tls_versions = "tlsv1.2,tlsv1.1,tlsv1"
+## NOTE: Do not use tlsv1.3 if emqx is running on OTP-22 or earlier
+## listener.ssl.external.tls_versions = "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"
 
 ## TLS Handshake timeout.
 ##
@@ -1563,7 +1564,7 @@ listener.ws.external.access.1 = "allow all"
 ## Supported subprotocols
 ##
 ## Default: mqtt, mqtt-v3, mqtt-v3.1.1, mqtt-v5
-## listener.ws.external.supported_protocols = mqtt, mqtt-v3, mqtt-v3.1.1, mqtt-v5
+## listener.ws.external.supported_protocols = "mqtt, mqtt-v3, mqtt-v3.1.1, mqtt-v5"
 
 ## Enable the Proxy Protocol V1/2 if the EMQ cluster is deployed behind
 ## HAProxy or Nginx.
@@ -1784,7 +1785,7 @@ listener.wss.external.access.1 = "allow all"
 ## Supported subprotocols
 ##
 ## Default: mqtt, mqtt-v3, mqtt-v3.1.1, mqtt-v5
-## listener.ws.external.supported_protocols = mqtt, mqtt-v3, mqtt-v3.1.1, mqtt-v5
+## listener.wss.external.supported_protocols = "mqtt, mqtt-v3, mqtt-v3.1.1, mqtt-v5"
 
 ## Enable the Proxy Protocol V1/2 support.
 ##
@@ -1805,7 +1806,8 @@ listener.wss.external.access.1 = "allow all"
 ## See: listener.ssl.$name.tls_versions
 ##
 ## Value: String, seperated by ','
-## listener.wss.external.tls_versions = "tlsv1.2,tlsv1.1,tlsv1"
+## NOTE: Do not use tlsv1.3 if emqx is running on OTP-22 or earlier
+## listener.wss.external.tls_versions = "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"
 
 ## Path to the file containing the user's private PEM-encoded key.
 ##

+ 6 - 3
get-dashboard.sh

@@ -1,6 +1,5 @@
-#!/bin/sh
+#!/bin/bash
 
-#set -euo pipefail
 set -eu
 
 VERSION="$1"
@@ -10,7 +9,11 @@ cd -P -- "$(dirname -- "$0")"
 
 DOWNLOAD_URL='https://github.com/emqx/emqx-dashboard-frontend/releases/download'
 
-DASHBOARD_PATH='apps/emqx_dashboard/priv'
+if [ "$EMQX_ENTERPRISE" = 'true' ] || [ "$EMQX_ENTERPRISE" == '1' ]; then
+    DASHBOARD_PATH='lib-enterprise/emqx_dashboard/priv'
+else
+    DASHBOARD_PATH='lib-opensource/emqx_dashboard/priv'
+fi
 
 case $(uname) in
     *Darwin*) SED="sed -E";;

apps/emqx_dashboard/.gitignore → lib-opensource/emqx_dashboard/.gitignore


apps/emqx_dashboard/README.md → lib-opensource/emqx_dashboard/README.md


+ 2 - 1
apps/emqx_dashboard/etc/emqx_dashboard.conf

@@ -105,7 +105,8 @@ dashboard.listener.http.ipv6_v6only = false
 ## TLS versions only to protect from POODLE attack.
 ##
 ## Value: String, seperated by ','
-## dashboard.listener.https.tls_versions = "tlsv1.2,tlsv1.1,tlsv1"
+## NOTE: Do not use tlsv1.3 if emqx is running on OTP-22 or earlier
+## dashboard.listener.https.tls_versions = "tlsv1.3,tlsv1.2,tlsv1.1,tlsv1"
 
 ## See: 'listener.ssl.<name>.ciphers' in emq.conf
 ##

apps/emqx_dashboard/include/emqx_dashboard.hrl → lib-opensource/emqx_dashboard/include/emqx_dashboard.hrl


apps/emqx_dashboard/priv/emqx_dashboard.schema → lib-opensource/emqx_dashboard/priv/emqx_dashboard.schema


apps/emqx_dashboard/rebar.config → lib-opensource/emqx_dashboard/rebar.config


apps/emqx_dashboard/src/emqx_dashboard.app.src → lib-opensource/emqx_dashboard/src/emqx_dashboard.app.src


apps/emqx_dashboard/src/emqx_dashboard.erl → lib-opensource/emqx_dashboard/src/emqx_dashboard.erl


apps/emqx_dashboard/src/emqx_dashboard_admin.erl → lib-opensource/emqx_dashboard/src/emqx_dashboard_admin.erl


apps/emqx_dashboard/src/emqx_dashboard_api.erl → lib-opensource/emqx_dashboard/src/emqx_dashboard_api.erl


apps/emqx_dashboard/src/emqx_dashboard_app.erl → lib-opensource/emqx_dashboard/src/emqx_dashboard_app.erl


apps/emqx_dashboard/src/emqx_dashboard_cli.erl → lib-opensource/emqx_dashboard/src/emqx_dashboard_cli.erl


apps/emqx_dashboard/src/emqx_dashboard_sup.erl → lib-opensource/emqx_dashboard/src/emqx_dashboard_sup.erl


apps/emqx_dashboard/test/.placeholder → lib-opensource/emqx_dashboard/test/.placeholder


apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl → lib-opensource/emqx_dashboard/test/emqx_dashboard_SUITE.erl


apps/emqx_management/.gitignore → lib-opensource/emqx_management/.gitignore


apps/emqx_management/README.md → lib-opensource/emqx_management/README.md


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
apps/emqx_management/etc/emqx_management.conf


apps/emqx_management/include/emqx_mgmt.hrl → lib-opensource/emqx_management/include/emqx_mgmt.hrl


apps/emqx_management/priv/emqx_management.schema → lib-opensource/emqx_management/priv/emqx_management.schema


apps/emqx_management/rebar.config → lib-opensource/emqx_management/rebar.config


apps/emqx_management/src/emqx_management.app.src → lib-opensource/emqx_management/src/emqx_management.app.src


apps/emqx_management/src/emqx_mgmt.erl → lib-opensource/emqx_management/src/emqx_mgmt.erl


apps/emqx_management/src/emqx_mgmt_api.erl → lib-opensource/emqx_management/src/emqx_mgmt_api.erl


apps/emqx_management/src/emqx_mgmt_api_alarms.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_alarms.erl


apps/emqx_management/src/emqx_mgmt_api_apps.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_apps.erl


apps/emqx_management/src/emqx_mgmt_api_banned.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_banned.erl


apps/emqx_management/src/emqx_mgmt_api_brokers.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_brokers.erl


apps/emqx_management/src/emqx_mgmt_api_clients.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_clients.erl


apps/emqx_management/src/emqx_mgmt_api_data.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_data.erl


apps/emqx_management/src/emqx_mgmt_api_listeners.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_listeners.erl


apps/emqx_management/src/emqx_mgmt_api_metrics.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_metrics.erl


apps/emqx_management/src/emqx_mgmt_api_modules.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_modules.erl


apps/emqx_management/src/emqx_mgmt_api_nodes.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_nodes.erl


apps/emqx_management/src/emqx_mgmt_api_plugins.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_plugins.erl


apps/emqx_management/src/emqx_mgmt_api_pubsub.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_pubsub.erl


apps/emqx_management/src/emqx_mgmt_api_routes.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_routes.erl


apps/emqx_management/src/emqx_mgmt_api_stats.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_stats.erl


apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_subscriptions.erl


apps/emqx_management/src/emqx_mgmt_api_topic_metrics.erl → lib-opensource/emqx_management/src/emqx_mgmt_api_topic_metrics.erl


apps/emqx_management/src/emqx_mgmt_app.erl → lib-opensource/emqx_management/src/emqx_mgmt_app.erl


apps/emqx_management/src/emqx_mgmt_auth.erl → lib-opensource/emqx_management/src/emqx_mgmt_auth.erl


apps/emqx_management/src/emqx_mgmt_cli.erl → lib-opensource/emqx_management/src/emqx_mgmt_cli.erl


apps/emqx_management/src/emqx_mgmt_http.erl → lib-opensource/emqx_management/src/emqx_mgmt_http.erl


apps/emqx_management/src/emqx_mgmt_sup.erl → lib-opensource/emqx_management/src/emqx_mgmt_sup.erl


apps/emqx_management/src/emqx_mgmt_util.erl → lib-opensource/emqx_management/src/emqx_mgmt_util.erl


apps/emqx_management/test/emqx_mgmt_SUITE.erl → lib-opensource/emqx_management/test/emqx_mgmt_SUITE.erl


apps/emqx_management/test/emqx_mgmt_api_SUITE.erl → lib-opensource/emqx_management/test/emqx_mgmt_api_SUITE.erl


apps/emqx_management/test/etc/emqx_management.conf → lib-opensource/emqx_management/test/etc/emqx_management.conf


apps/emqx_management/test/etc/emqx_reloader.conf → lib-opensource/emqx_management/test/etc/emqx_reloader.conf


apps/emqx_management/test/rfc6455_client.erl → lib-opensource/emqx_management/test/rfc6455_client.erl


apps/emqx_rule_engine/.gitignore → lib-opensource/emqx_rule_engine/.gitignore


apps/emqx_rule_engine/README.md → lib-opensource/emqx_rule_engine/README.md


apps/emqx_rule_engine/docs/api_examples.md → lib-opensource/emqx_rule_engine/docs/api_examples.md


apps/emqx_rule_engine/docs/cli_examples.md → lib-opensource/emqx_rule_engine/docs/cli_examples.md


apps/emqx_rule_engine/docs/design.md → lib-opensource/emqx_rule_engine/docs/design.md


apps/emqx_rule_engine/etc/emqx_rule_engine.conf → lib-opensource/emqx_rule_engine/etc/emqx_rule_engine.conf


apps/emqx_rule_engine/include/rule_actions.hrl → lib-opensource/emqx_rule_engine/include/rule_actions.hrl


apps/emqx_rule_engine/include/rule_engine.hrl → lib-opensource/emqx_rule_engine/include/rule_engine.hrl


apps/emqx_rule_engine/priv/emqx_rule_engine.schema → lib-opensource/emqx_rule_engine/priv/emqx_rule_engine.schema


apps/emqx_rule_engine/rebar.config → lib-opensource/emqx_rule_engine/rebar.config


apps/emqx_rule_engine/src/emqx_rule_actions.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_actions.erl


apps/emqx_rule_engine/src/emqx_rule_actions_trans.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_actions_trans.erl


apps/emqx_rule_engine/src/emqx_rule_engine.app.src → lib-opensource/emqx_rule_engine/src/emqx_rule_engine.app.src


apps/emqx_rule_engine/src/emqx_rule_engine.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_engine.erl


apps/emqx_rule_engine/src/emqx_rule_engine_api.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_engine_api.erl


apps/emqx_rule_engine/src/emqx_rule_engine_app.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_engine_app.erl


apps/emqx_rule_engine/src/emqx_rule_engine_cli.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_engine_cli.erl


apps/emqx_rule_engine/src/emqx_rule_engine_sup.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_engine_sup.erl


apps/emqx_rule_engine/src/emqx_rule_events.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_events.erl


apps/emqx_rule_engine/src/emqx_rule_funcs.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_funcs.erl


apps/emqx_rule_engine/src/emqx_rule_id.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_id.erl


apps/emqx_rule_engine/src/emqx_rule_locker.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_locker.erl


apps/emqx_rule_engine/src/emqx_rule_maps.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_maps.erl


apps/emqx_rule_engine/src/emqx_rule_metrics.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_metrics.erl


apps/emqx_rule_engine/src/emqx_rule_registry.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_registry.erl


apps/emqx_rule_engine/src/emqx_rule_runtime.erl → lib-opensource/emqx_rule_engine/src/emqx_rule_runtime.erl


+ 0 - 0
apps/emqx_rule_engine/src/emqx_rule_sqlparser.erl


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů