commit
3d99bd2ef5
|
@ -29,7 +29,7 @@
|
|||
!export EMQX_LOG__LEVEL=debug
|
||||
|
||||
!./bin/emqx start
|
||||
?EMQ X .* is started successfully!
|
||||
?EMQ.* is started successfully!
|
||||
?SH-PROMPT
|
||||
|
||||
[shell emqx2]
|
||||
|
@ -43,7 +43,7 @@
|
|||
!export EMQX_LOG__LEVEL=debug
|
||||
|
||||
!./bin/emqx start
|
||||
?EMQ X .* is started successfully!
|
||||
?EMQ.* is started successfully!
|
||||
?SH-PROMPT
|
||||
|
||||
!./bin/emqx_ctl cluster join emqx@127.0.0.1
|
||||
|
|
|
@ -93,9 +93,9 @@ jobs:
|
|||
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx stop
|
||||
echo "EMQX stopped"
|
||||
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx install
|
||||
echo "EQMX installed"
|
||||
echo "EMQX installed"
|
||||
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx uninstall
|
||||
echo "EQMX uninstaled"
|
||||
echo "EMQX uninstaled"
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.profile }}
|
||||
|
|
|
@ -109,9 +109,9 @@ jobs:
|
|||
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx stop
|
||||
echo "EMQX stopped"
|
||||
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx install
|
||||
echo "EQMX installed"
|
||||
echo "EMQX installed"
|
||||
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx uninstall
|
||||
echo "EQMX uninstaled"
|
||||
echo "EMQX uninstaled"
|
||||
|
||||
mac:
|
||||
strategy:
|
||||
|
|
|
@ -79,7 +79,7 @@ jobs:
|
|||
TARGET: emqx/${{ needs.build.outputs.imgname }}
|
||||
EMQX_TAG: ${{ needs.build.outputs.version }}
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
|
||||
up -d --build
|
||||
- uses: actions/checkout@v3
|
||||
|
@ -180,7 +180,7 @@ jobs:
|
|||
EMQX_TAG: ${{ needs.build.outputs.version }}
|
||||
MYSQL_TAG: ${{ matrix.mysql_tag }}
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
|
||||
up -d --build
|
||||
|
@ -287,7 +287,7 @@ jobs:
|
|||
EMQX_TAG: ${{ needs.build.outputs.version }}
|
||||
PGSQL_TAG: ${{ matrix.pgsql_tag }}
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
|
||||
up -d --build
|
||||
|
@ -383,7 +383,7 @@ jobs:
|
|||
EMQX_TAG: ${{ needs.build.outputs.version }}
|
||||
MYSQL_TAG: 8
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose-enterprise-tomcat-tcp.yaml \
|
||||
|
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
env:
|
||||
LDAP_TAG: ${{ matrix.ldap_tag }}
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-ldap-tcp.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose.yaml \
|
||||
up -d --build
|
||||
|
@ -88,9 +88,9 @@ jobs:
|
|||
run: |
|
||||
docker rm -f $(docker ps -qa) || true
|
||||
docker network rm $(docker network ls -q) || true
|
||||
- name: docker-compose up
|
||||
- name: docker compose up
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-toxiproxy.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose-mongo-${{ matrix.connect_type }}.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose.yaml \
|
||||
|
@ -164,10 +164,10 @@ jobs:
|
|||
run: |
|
||||
docker rm -f $(docker ps -qa) || true
|
||||
docker network rm $(docker network ls -q) || true
|
||||
- name: docker-compose up
|
||||
- name: docker compose up
|
||||
timeout-minutes: 5
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-mysql-${{ matrix.connect_type }}.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose.yaml \
|
||||
up -d --build
|
||||
|
@ -254,9 +254,9 @@ jobs:
|
|||
run: |
|
||||
docker rm -f $(docker ps -qa) || true
|
||||
docker network rm $(docker network ls -q) || true
|
||||
- name: docker-compose up
|
||||
- name: docker compose up
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-pgsql-${{ matrix.connect_type }}.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose.yaml \
|
||||
up -d --build
|
||||
|
@ -339,9 +339,9 @@ jobs:
|
|||
run: |
|
||||
docker rm -f $(docker ps -qa) || true
|
||||
docker network rm $(docker network ls -q) || true
|
||||
- name: docker-compose up
|
||||
- name: docker compose up
|
||||
run: |
|
||||
docker-compose \
|
||||
docker compose \
|
||||
-f .ci/docker-compose-file/docker-compose-redis-${{ matrix.node_type }}-${{ matrix.connect_type }}.yaml \
|
||||
-f .ci/docker-compose-file/docker-compose.yaml \
|
||||
up -d --build
|
||||
|
|
|
@ -235,8 +235,8 @@ This patch release is only to fix windows build which failed on v4.4.0.
|
|||
|
||||
### Important changes
|
||||
|
||||
- **For Debian/Ubuntu users**, Debian/Ubuntu package (deb) installed EMQ X is now started from systemd.
|
||||
This is to use systemd's supervision functionality to ensure that EMQ X service restarts after a crash.
|
||||
- **For Debian/Ubuntu users**, Debian/Ubuntu package (deb) installed EMQX is now started from systemd.
|
||||
This is to use systemd's supervision functionality to ensure that EMQX service restarts after a crash.
|
||||
The package installation service upgrade from init.d to systemd has been verified,
|
||||
it is still recommended that you verify and confirm again before deploying to the production environment,
|
||||
at least to ensure that systemd is available in your system
|
||||
|
@ -280,7 +280,7 @@ This patch release is only to fix windows build which failed on v4.4.0.
|
|||
- Improve the error log content when the Proxy Protocol message is received without `proxy_protocol` configured.
|
||||
|
||||
- Add additional message attributes to the message reported by the gateway.
|
||||
Messages from gateways such as CoAP, LwM2M, Stomp, ExProto, etc., when converted to EMQ X messages,
|
||||
Messages from gateways such as CoAP, LwM2M, Stomp, ExProto, etc., when converted to EMQX messages,
|
||||
add fields such as protocol name, protocol version, user name, client IP, etc.,
|
||||
which can be used for multi-language hook extension (ExHook)
|
||||
|
||||
|
|
|
@ -43,7 +43,9 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, #{acl := ACLParams = #{path :=
|
|||
ClientInfo1 = ClientInfo#{access => access(PubSub), topic => Topic},
|
||||
Username = maps:get(username, ClientInfo1, undefined),
|
||||
case check_acl_request(ACLParams, ClientInfo1) of
|
||||
{ok, 200, <<"ignore">>} -> ok;
|
||||
{ok, 200, <<"ignore">>} ->
|
||||
?LOG(debug, "ignored, ~s to topic ~ts, username: ~ts",
|
||||
[PubSub, Topic, Username]);
|
||||
{ok, 200, _Body} ->
|
||||
?LOG(debug, "Allow ~s to topic ~ts, username: ~ts",
|
||||
[PubSub, Topic, Username]),
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_http,
|
||||
[{description, "EMQ X Authentication/ACL with HTTP API"},
|
||||
{vsn, "4.3.11"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication/ACL with HTTP API"},
|
||||
{vsn, "4.3.12"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_http_sup]},
|
||||
{applications, [kernel,stdlib,ehttpc]},
|
||||
{mod, {emqx_auth_http_app, []}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-http"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.10",
|
||||
[{"4.3.11",
|
||||
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.10",
|
||||
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.9",
|
||||
|
@ -45,7 +48,10 @@
|
|||
{load_module,emqx_auth_http_cli,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4.3.[0-1]">>,[{restart_application,emqx_auth_http}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.10",
|
||||
[{"4.3.11",
|
||||
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.10",
|
||||
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.9",
|
||||
|
|
|
@ -39,7 +39,7 @@ check(ClientInfo, AuthResult, #{auth := AuthParms = #{path := Path},
|
|||
Username = maps:get(username, ClientInfo, undefined),
|
||||
case authenticate(AuthParms, ClientInfo) of
|
||||
{ok, 200, <<"ignore">>} ->
|
||||
ok;
|
||||
?LOG(debug, "Auth ignored, path: ~ts, username: ~ts", [Path, Username]);
|
||||
{ok, 200, Body} ->
|
||||
?LOG(debug, "Auth succeeded from path: ~ts, username: ~ts", [Path, Username]),
|
||||
IsSuperuser = is_superuser(SuperParams, ClientInfo),
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application, emqx_auth_jwt,
|
||||
[{description, "EMQ X Authentication with JWT"},
|
||||
{vsn, "4.4.9"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication with JWT"},
|
||||
{vsn, "4.4.10"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_jwt_sup]},
|
||||
{applications, [kernel,stdlib,jose]},
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.4.8",
|
||||
[{"4.4.9",[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.8",
|
||||
[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_jwt_svr,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[2-7]">>,
|
||||
|
@ -9,7 +10,8 @@
|
|||
{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[0-1]">>,[{restart_application,emqx_auth_jwt}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.4.8",
|
||||
[{"4.4.9",[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.8",
|
||||
[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_jwt_svr,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[2-7]">>,
|
||||
|
|
|
@ -41,15 +41,15 @@ check(ClientInfo, AuthResult, State) ->
|
|||
check_auth(ClientInfo, AuthResult, #{from := From, checklists := Checklists}) ->
|
||||
case maps:find(From, ClientInfo) of
|
||||
error ->
|
||||
ok;
|
||||
?LOG(debug, "Auth ignored, ~p not found in Client: ~p", [From, ClientInfo]);
|
||||
{ok, undefined} ->
|
||||
ok;
|
||||
?LOG(debug, "Auth ignored, ~p undefined, Client: ~p", [From, ClientInfo]);
|
||||
{ok, Token} ->
|
||||
case emqx_auth_jwt_svr:verify(Token) of
|
||||
{error, not_found} ->
|
||||
ok;
|
||||
?LOG_SENSITIVE(debug, "Auth ignored, ~p not_found, Client: ~p", [Token, ClientInfo]);
|
||||
{error, not_token} ->
|
||||
ok;
|
||||
?LOG_SENSITIVE(debug, "Auth ignored, ~p not_token, Client: ~p", [Token, ClientInfo]);
|
||||
{error, Reason} ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"Auth from JWT failed, Client: ~p, Reason: ~p",
|
||||
|
|
|
@ -28,7 +28,9 @@
|
|||
|
||||
check_acl(ClientInfo, PubSub, Topic, NoMatchAction, State) ->
|
||||
case do_check_acl(ClientInfo, PubSub, Topic, NoMatchAction, State) of
|
||||
ok -> ok;
|
||||
ok -> ?LOG_SENSITIVE(debug,
|
||||
"[LDAP] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
|
||||
[Topic, PubSub, ClientInfo]);
|
||||
{stop, allow} ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[LDAP] Allow Topic: ~p, Action: ~p for Client: ~p",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_ldap,
|
||||
[{description, "EMQ X Authentication/ACL with LDAP"},
|
||||
{vsn, "4.3.7"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication/ACL with LDAP"},
|
||||
{vsn, "4.3.8"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_ldap_sup]},
|
||||
{applications, [kernel,stdlib,eldap2,ecpool]},
|
||||
{mod, {emqx_auth_ldap_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-ldap"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.6",
|
||||
[{"4.3.7",
|
||||
[{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.5",
|
||||
|
@ -24,7 +27,10 @@
|
|||
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_ldap_cli,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.6",
|
||||
[{"4.3.7",
|
||||
[{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.5",
|
||||
|
|
|
@ -59,13 +59,15 @@ check(ClientInfo = #{username := Username, password := Password}, AuthResult,
|
|||
case CheckResult of
|
||||
ok ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[LDAP] Auth from ldap succeeded, Client: ~p",
|
||||
"[LDAP] Auth succeeded, Client: ~p",
|
||||
[ClientInfo]),
|
||||
{stop, AuthResult#{auth_result => success, anonymous => false}};
|
||||
{error, not_found} ->
|
||||
ok;
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[LDAP] Auth ignored, Client: ~p",
|
||||
[ClientInfo]);
|
||||
{error, ResultCode} ->
|
||||
?LOG_SENSITIVE(error, "[LDAP] Auth from ldap failed: ~p", [ResultCode]),
|
||||
?LOG_SENSITIVE(error, "[LDAP] Auth failed: ~p", [ResultCode]),
|
||||
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
|
||||
end.
|
||||
|
||||
|
|
|
@ -54,7 +54,9 @@ check_acl(ClientInfo = #{ clientid := Clientid }, PubSub, Topic, _NoMatchAction,
|
|||
[Topic, PubSub, ClientInfo]),
|
||||
{stop, deny};
|
||||
_ ->
|
||||
ok
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[Mnesia] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
|
||||
[Topic, PubSub, ClientInfo])
|
||||
end.
|
||||
|
||||
description() -> "Acl with Mnesia".
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_mnesia,
|
||||
[{description, "EMQ X Authentication with Mnesia"},
|
||||
{vsn, "4.3.11"}, % strict semver, bump manually
|
||||
[{description, "EMQX Authentication with Mnesia"},
|
||||
{vsn, "4.3.12"}, % strict semver, bump manually
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel,stdlib,mnesia]},
|
||||
{mod, {emqx_auth_mnesia_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-mnesia"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.10",
|
||||
[{"4.3.11",
|
||||
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.10",
|
||||
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.9",
|
||||
|
@ -47,7 +50,10 @@
|
|||
{load_module,emqx_acl_mnesia_cli,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.10",
|
||||
[{"4.3.11",
|
||||
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.10",
|
||||
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.9",
|
||||
|
|
|
@ -60,19 +60,17 @@ check(ClientInfo = #{ clientid := Clientid
|
|||
MatchSpec = ets:fun2ms(fun({?TABLE, {clientid, X}, Password, InterTime}) when X =:= Clientid-> Password;
|
||||
({?TABLE, {username, X}, Password, InterTime}) when X =:= Username andalso X =/= undefined -> Password
|
||||
end),
|
||||
Info = maps:without([password], ClientInfo),
|
||||
case ets:select(?TABLE, MatchSpec) of
|
||||
[] ->
|
||||
ok;
|
||||
?LOG(debug, "[Mnesia] Auth ignored, Client: ~p", [Info]);
|
||||
List ->
|
||||
case match_password(NPassword, HashType, List) of
|
||||
false ->
|
||||
Info = maps:without([password], ClientInfo),
|
||||
?LOG(info, "[Mnesia] Auth from mnesia failed: ~p", [Info]),
|
||||
{stop, AuthResult#{anonymous => false, auth_result => password_error}};
|
||||
_ ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[Mnesia] Auth from mnesia succeeded, Client: ~p",
|
||||
[ClientInfo]),
|
||||
?LOG(debug,"[Mnesia] Auth from mnesia succeeded, Client: ~p", [Info]),
|
||||
{stop, AuthResult#{anonymous => false, auth_result => success}}
|
||||
end
|
||||
end.
|
||||
|
|
|
@ -35,7 +35,9 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, Env = #{aclquery := AclQuery})
|
|||
maps:from_list(emqx_auth_mongo:replvars(Selector, ClientInfo))
|
||||
end, SelectorList),
|
||||
case emqx_auth_mongo:query_multi(Pool, Coll, SelectorMapList) of
|
||||
[] -> ok;
|
||||
[] -> ?LOG_SENSITIVE(debug,
|
||||
"[MongoDB] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
|
||||
[Topic, PubSub, ClientInfo]);
|
||||
Rows ->
|
||||
try match(ClientInfo, Topic, topics(PubSub, Rows)) of
|
||||
matched ->
|
||||
|
@ -50,7 +52,7 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, Env = #{aclquery := AclQuery})
|
|||
{stop, deny}
|
||||
catch
|
||||
_Err:Reason->
|
||||
?LOG(error, "[MongoDB] Check mongo ~p ACL failed, got ACL config: ~p, error: :~p",
|
||||
?LOG(error, "[MongoDB] ACL ignored, check mongo ~p ACL failed, got ACL config: ~p, error: ~p",
|
||||
[PubSub, Rows, Reason]),
|
||||
ignore
|
||||
end
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_mongo,
|
||||
[{description, "EMQ X Authentication/ACL with MongoDB"},
|
||||
{vsn, "4.4.6"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication/ACL with MongoDB"},
|
||||
{vsn, "4.4.7"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_mongo_sup]},
|
||||
{applications, [kernel,stdlib,mongodb,ecpool]},
|
||||
{mod, {emqx_auth_mongo_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-mongo"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.4.5",
|
||||
[{"4.4.6",
|
||||
[{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.5",
|
||||
[{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.4",
|
||||
|
@ -22,7 +25,10 @@
|
|||
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.4.5",
|
||||
[{"4.4.6",
|
||||
[{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.5",
|
||||
[{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.4",
|
||||
|
|
|
@ -52,10 +52,11 @@ check(ClientInfo = #{password := Password}, AuthResult,
|
|||
hash = HashType, selector = Selector} = AuthQuery,
|
||||
Pool = maps:get(pool, Env, ?APP),
|
||||
case query(Pool, Collection, maps:from_list(replvars(Selector, ClientInfo))) of
|
||||
undefined -> ok;
|
||||
undefined ->
|
||||
?LOG_SENSITIVE(debug, "[MongoDB] Auth ignored, Client: ~p", [ClientInfo]);
|
||||
{error, Reason} ->
|
||||
?tp(emqx_auth_mongo_check_authn_error, #{error => Reason}),
|
||||
?LOG_SENSITIVE(error, "[MongoDB] Can't connect to MongoDB server: ~0p", [Reason]),
|
||||
?LOG_SENSITIVE(error, "[MongoDB] Auth failed, Can't connect to MongoDB server: ~0p", [Reason]),
|
||||
{stop, AuthResult#{auth_result => not_authorized, anonymous => false}};
|
||||
UserMap ->
|
||||
Result = case [maps:get(Field, UserMap, undefined) || Field <- Fields] of
|
||||
|
@ -69,7 +70,7 @@ check(ClientInfo = #{password := Password}, AuthResult,
|
|||
ok ->
|
||||
?tp(emqx_auth_mongo_superuser_check_authn_ok, #{}),
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[MongoDB] Auth from mongo succeeded, Client: ~p",
|
||||
"[MongoDB] Auth succeeded, Client: ~p",
|
||||
[ClientInfo]),
|
||||
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
|
||||
anonymous => false,
|
||||
|
|
|
@ -28,7 +28,10 @@
|
|||
|
||||
check_acl(ClientInfo, PubSub, Topic, NoMatchAction, #{pool := Pool} = State) ->
|
||||
case do_check_acl(Pool, ClientInfo, PubSub, Topic, NoMatchAction, State) of
|
||||
ok -> ok;
|
||||
ok ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[MySQL] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
|
||||
[Topic, PubSub, ClientInfo]);
|
||||
{stop, allow} ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[MySQL] Allow Topic: ~p, Action: ~p for Client: ~p",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_mysql,
|
||||
[{description, "EMQ X Authentication/ACL with MySQL"},
|
||||
{vsn, "4.3.5"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication/ACL with MySQL"},
|
||||
{vsn, "4.3.6"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_mysql_sup]},
|
||||
{applications, [kernel,stdlib,mysql,ecpool]},
|
||||
{mod, {emqx_auth_mysql_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-mysql"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.4",
|
||||
[{"4.3.5",
|
||||
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.4",
|
||||
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_mysql_cli,brutal_purge,soft_purge,[]}]},
|
||||
|
@ -20,7 +23,10 @@
|
|||
{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.4",
|
||||
[{"4.3.5",
|
||||
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.4",
|
||||
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_mysql_cli,brutal_purge,soft_purge,[]}]},
|
||||
|
|
|
@ -46,16 +46,14 @@ check(ClientInfo = #{password := Password}, AuthResult,
|
|||
end,
|
||||
case CheckPass of
|
||||
ok ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[MySQL] Auth from mysql succeeded, Client: ~p",
|
||||
[ClientInfo]),
|
||||
?LOG_SENSITIVE(debug, "[MySQL] Auth succeeded, Client: ~p", [ClientInfo]),
|
||||
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
|
||||
anonymous => false,
|
||||
auth_result => success}};
|
||||
{error, not_found} ->
|
||||
ok;
|
||||
?LOG_SENSITIVE(debug, "[MySQL] Auth ignored, Client: ~p", [ClientInfo]);
|
||||
{error, ResultCode} ->
|
||||
?LOG_SENSITIVE(error, "[MySQL] Auth from mysql failed: ~p", [ResultCode]),
|
||||
?LOG_SENSITIVE(error, "[MySQL] Auth failed: ~p", [ResultCode]),
|
||||
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
|
||||
end.
|
||||
|
||||
|
|
|
@ -32,7 +32,10 @@ do_check_acl(_Pool, #{username := <<$$, _/binary>>}, _PubSub, _Topic, _NoMatchAc
|
|||
ok;
|
||||
do_check_acl(Pool, ClientInfo, PubSub, Topic, _NoMatchAction, #{acl_query := {AclSql, AclParams}}) ->
|
||||
case emqx_auth_pgsql_cli:equery(Pool, AclSql, AclParams, ClientInfo) of
|
||||
{ok, _, []} -> ok;
|
||||
{ok, _, []} ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[Postgres] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
|
||||
[Topic, PubSub, ClientInfo]);
|
||||
{ok, _, Rows} ->
|
||||
Rules = filter(PubSub, compile(Rows)),
|
||||
case match(ClientInfo, Topic, Rules) of
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_pgsql,
|
||||
[{description, "EMQ X Authentication/ACL with PostgreSQL"},
|
||||
{vsn, "4.4.5"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication/ACL with PostgreSQL"},
|
||||
{vsn, "4.4.6"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_pgsql_sup]},
|
||||
{applications, [kernel,stdlib,epgsql,ecpool]},
|
||||
{mod, {emqx_auth_pgsql_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-pgsql"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.4.4",
|
||||
[{"4.4.5",
|
||||
[{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.4",
|
||||
[{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.3",
|
||||
|
@ -14,7 +17,10 @@
|
|||
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_pgsql_app,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.4.4",
|
||||
[{"4.4.5",
|
||||
[{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.4",
|
||||
[{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.3",
|
||||
|
|
|
@ -45,16 +45,14 @@ check(ClientInfo = #{password := Password}, AuthResult,
|
|||
end,
|
||||
case CheckPass of
|
||||
ok ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[Postgres] Auth from pgsql succeeded, Client: ~p",
|
||||
[ClientInfo]),
|
||||
?LOG_SENSITIVE(debug, "[Postgres] Auth succeeded, Client: ~p", [ClientInfo]),
|
||||
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
|
||||
anonymous => false,
|
||||
auth_result => success}};
|
||||
{error, not_found} ->
|
||||
ok;
|
||||
?LOG_SENSITIVE(debug, "[Postgres] Auth ignored, Client: ~p", [ClientInfo]);
|
||||
{error, ResultCode} ->
|
||||
?LOG_SENSITIVE(error, "[Postgres] Auth from pgsql failed: ~p", [ResultCode]),
|
||||
?LOG_SENSITIVE(error, "[Postgres] Auth failed: ~p", [ResultCode]),
|
||||
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
|
||||
end.
|
||||
|
||||
|
|
|
@ -30,7 +30,10 @@ check_acl(#{username := <<$$, _/binary>>}, _PubSub, _Topic, _AclResult, _Config)
|
|||
check_acl(ClientInfo, PubSub, Topic, _AclResult,
|
||||
#{acl_cmd := AclCmd, timeout := Timeout, type := Type, pool := Pool}) ->
|
||||
case emqx_auth_redis_cli:q(Pool, Type, AclCmd, ClientInfo, Timeout) of
|
||||
{ok, []} -> ok;
|
||||
{ok, []} ->
|
||||
?LOG_SENSITIVE(debug,
|
||||
"[Redis] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
|
||||
[Topic, PubSub, ClientInfo]);
|
||||
{ok, Rules} ->
|
||||
case match(ClientInfo, PubSub, Topic, Rules) of
|
||||
allow ->
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_auth_redis,
|
||||
[{description, "EMQ X Authentication/ACL with Redis"},
|
||||
{vsn, "4.3.5"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Authentication/ACL with Redis"},
|
||||
{vsn, "4.3.6"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_auth_redis_sup]},
|
||||
{applications, [kernel,stdlib,eredis,eredis_cluster,ecpool]},
|
||||
{mod, {emqx_auth_redis_app, []}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-auth-redis"}
|
||||
]}
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.4",
|
||||
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
|
||||
[{"4.3.5",
|
||||
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.4",
|
||||
[{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.3",
|
||||
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
|
||||
|
@ -18,8 +22,12 @@
|
|||
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.4",
|
||||
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
|
||||
[{"4.3.5",
|
||||
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.4",
|
||||
[{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.3",
|
||||
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
|
||||
|
|
|
@ -47,14 +47,15 @@ check(ClientInfo = #{password := Password}, AuthResult,
|
|||
end,
|
||||
case CheckPass of
|
||||
ok ->
|
||||
?LOG_SENSITIVE(debug, "[Redis] Auth succeeded, Client: ~p", [ClientInfo]),
|
||||
IsSuperuser = is_superuser(Pool, Type, SuperCmd, ClientInfo, Timeout),
|
||||
{stop, AuthResult#{is_superuser => IsSuperuser,
|
||||
anonymous => false,
|
||||
auth_result => success}};
|
||||
{error, not_found} ->
|
||||
ok;
|
||||
?LOG_SENSITIVE(debug, "[Redis] Auth ignored, Client: ~p", [ClientInfo]);
|
||||
{error, ResultCode} ->
|
||||
?LOG_SENSITIVE(error, "[Redis] Auth from redis failed: ~p", [ResultCode]),
|
||||
?LOG_SENSITIVE(error, "[Redis] Auth failed: ~p", [ResultCode]),
|
||||
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
|
||||
end.
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_bridge_mqtt,
|
||||
[{description, "EMQ X Bridge to MQTT Broker"},
|
||||
{vsn, "4.3.8"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Bridge to MQTT Broker"},
|
||||
{vsn, "4.3.9"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel,stdlib,replayq,emqtt]},
|
||||
{mod, {emqx_bridge_mqtt_app, []}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-bridge-mqtt"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.7",
|
||||
[{"4.3.8",
|
||||
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.7",
|
||||
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_bridge_connect,brutal_purge,soft_purge,[]},
|
||||
|
@ -23,7 +25,9 @@
|
|||
{load_module,emqx_bridge_worker,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.7",
|
||||
[{"4.3.8",
|
||||
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.7",
|
||||
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_bridge_connect,brutal_purge,soft_purge,[]},
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_coap,
|
||||
[{description, "EMQ X CoAP Gateway"},
|
||||
{vsn, "4.3.3"}, % strict semver, bump manually!
|
||||
[{description, "EMQX CoAP Gateway"},
|
||||
{vsn, "4.3.4"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel,stdlib,gen_coap]},
|
||||
{mod, {emqx_coap_app, []}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-coap"}
|
||||
]}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
%% -*- mode: erlang -*-
|
||||
{application, emqx_exhook,
|
||||
[{description, "EMQ X Extension for Hook"},
|
||||
{vsn, "4.4.6"},
|
||||
[{description, "EMQX Extension for Hook"},
|
||||
{vsn, "4.4.7"},
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{mod, {emqx_exhook_app, []}},
|
||||
{applications, [kernel,stdlib,grpc]},
|
||||
{env,[]},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"}]}
|
||||
]}.
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{application, emqx_exproto,
|
||||
[{description, "EMQ X Extension for Protocol"},
|
||||
{vsn, "4.3.15"}, %% 4.3.3 is used by ee
|
||||
[{description, "EMQX Extension for Protocol"},
|
||||
{vsn, "4.3.16"}, %% 4.3.3 is used by ee
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{mod, {emqx_exproto_app, []}},
|
||||
{applications, [kernel,stdlib,grpc]},
|
||||
{env,[]},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"}]}
|
||||
]}.
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_lua_hook,
|
||||
[{description, "EMQ X Lua Hooks"},
|
||||
{vsn, "4.3.2"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Lua Hooks"},
|
||||
{vsn, "4.3.3"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel,stdlib]},
|
||||
{mod, {emqx_lua_hook_app,[]}},
|
||||
{env,[]},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-lua-hook"}
|
||||
]}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.1",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]}],
|
||||
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.1",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]}]}.
|
||||
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}]}.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application,emqx_lwm2m,
|
||||
[{description,"EMQ X LwM2M Gateway"},
|
||||
{vsn, "4.3.8"}, % strict semver, bump manually!
|
||||
[{description,"EMQX LwM2M Gateway"},
|
||||
{vsn, "4.3.9"}, % strict semver, bump manually!
|
||||
{modules,[]},
|
||||
{registered,[emqx_lwm2m_sup]},
|
||||
{applications,[kernel,stdlib,lwm2m_coap]},
|
||||
|
|
|
@ -7,14 +7,18 @@
|
|||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
|
||||
{"4.3.2",
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.5",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[3-4]">>,
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
|
@ -24,33 +28,34 @@
|
|||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.5",
|
||||
{"4.3.2",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]}],
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.7",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
|
||||
{"4.3.2",
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.5",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[3-4]">>,
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
|
@ -60,16 +65,13 @@
|
|||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.5",
|
||||
{"4.3.2",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.6",
|
||||
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]}]}.
|
||||
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
|
||||
{<<".*">>,[]}]}.
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_management,
|
||||
[{description, "EMQ X Management API and CLI"},
|
||||
{vsn, "4.4.13"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Management API and CLI"},
|
||||
{vsn, "4.4.14"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_management_sup]},
|
||||
{applications, [kernel,stdlib,emqx_plugin_libs,minirest]},
|
||||
{mod, {emqx_mgmt_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-management"}
|
||||
]}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application, emqx_plugin_libs,
|
||||
[{description, "EMQ X Plugin utility libs"},
|
||||
{vsn, "4.4.6"},
|
||||
[{description, "EMQX Plugin utility libs"},
|
||||
{vsn, "4.4.8"},
|
||||
{modules, []},
|
||||
{applications, [kernel,stdlib]},
|
||||
{env, []}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[
|
||||
{<<"4\\.4\\.[3-5]">>,
|
||||
[{"4.4.7",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.6",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[3-5]">>,
|
||||
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.2",[
|
||||
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.2",
|
||||
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.1",
|
||||
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
|
@ -20,17 +22,16 @@
|
|||
{update,emqx_slow_subs,{advanced,["4.4.0"]}},
|
||||
{load_module,emqx_slow_subs_api,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[
|
||||
{<<"4\\.4\\.[3-5]">>,
|
||||
[{"4.4.7",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.6",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[3-5]">>,
|
||||
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.3",
|
||||
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.2",
|
||||
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.1",
|
||||
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
|
||||
|
|
|
@ -18,9 +18,14 @@
|
|||
|
||||
-export([save_files_return_opts/2,
|
||||
save_files_return_opts/3,
|
||||
save_files_return_opts/4,
|
||||
save_file/2
|
||||
]).
|
||||
|
||||
-export([maybe_delete_dir/1,
|
||||
maybe_delete_dir/2
|
||||
]).
|
||||
|
||||
-type file_input_key() :: binary(). %% <<"file">> | <<"filename">>
|
||||
-type file_input() :: #{file_input_key() => binary()}.
|
||||
|
||||
|
@ -38,11 +43,18 @@
|
|||
-type opt_key() :: keyfile | certfile | cacertfile | verify | versions | ciphers.
|
||||
-type opt_value() :: term().
|
||||
-type opts() :: [{opt_key(), opt_value()}].
|
||||
-type dirname() :: atom() | string() | binary().
|
||||
|
||||
%% @doc Parse ssl options input.
|
||||
%% If the input contains file content, save the files in the given dir.
|
||||
%% Returns ssl options for Erlang's ssl application.
|
||||
-spec save_files_return_opts(opts_input(), atom() | string() | binary(),
|
||||
-spec save_files_return_opts(opts_input(), dirname(),
|
||||
string() | binary(), dirname()) -> opts().
|
||||
save_files_return_opts(Options, SubDir, ResId, ResSubdir) ->
|
||||
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId, ResSubdir]),
|
||||
save_files_return_opts(Options, Dir).
|
||||
|
||||
-spec save_files_return_opts(opts_input(), dirname(),
|
||||
string() | binary()) -> opts().
|
||||
save_files_return_opts(Options, SubDir, ResId) ->
|
||||
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]),
|
||||
|
@ -141,6 +153,20 @@ maybe_save_file(FileName, Content, Dir) ->
|
|||
error({"failed_to_save_ssl_file", FullFilename, Reason})
|
||||
end.
|
||||
|
||||
maybe_delete_dir(SubDir, ResId) ->
|
||||
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]),
|
||||
maybe_delete_dir(Dir).
|
||||
|
||||
maybe_delete_dir(Dir) ->
|
||||
case file:del_dir_r(Dir) of
|
||||
ok ->
|
||||
ok;
|
||||
{error, enoent} ->
|
||||
ok;
|
||||
{error, Reason} ->
|
||||
logger:error("Delete Resource dir ~p failed for reason: ~p", [Dir, Reason])
|
||||
end.
|
||||
|
||||
ensure_str(L) when is_list(L) -> L;
|
||||
ensure_str(B) when is_binary(B) -> unicode:characters_to_list(B, utf8).
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_prometheus,
|
||||
[{description, "Prometheus for EMQ X"},
|
||||
{vsn, "4.3.2"}, % strict semver, bump manually!
|
||||
[{description, "Prometheus for EMQX"},
|
||||
{vsn, "4.3.3"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_prometheus_sup]},
|
||||
{applications, [kernel,stdlib,prometheus]},
|
||||
{mod, {emqx_prometheus_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-prometheus"}
|
||||
]}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_psk_file,
|
||||
[{description,"EMQX PSK Plugin from File"},
|
||||
{vsn, "4.3.1"}, % strict semver, bump manually!
|
||||
{vsn, "4.3.2"}, % strict semver, bump manually!
|
||||
{modules,[]},
|
||||
{registered,[emqx_psk_file_sup]},
|
||||
{applications,[kernel,stdlib]},
|
||||
{mod,{emqx_psk_file_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-psk-file"}
|
||||
]}
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
{VSN,
|
||||
[{"4.3.0",
|
||||
[{load_module,emqx_psk_file,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]}
|
||||
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}
|
||||
],
|
||||
[{"4.3.0",
|
||||
[{load_module,emqx_psk_file,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]}
|
||||
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}
|
||||
]}.
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_recon,
|
||||
[{description, "EMQ X Recon Plugin"},
|
||||
{vsn, "4.3.0"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Recon Plugin"},
|
||||
{vsn, "4.3.1"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel,stdlib,recon]},
|
||||
{mod, {emqx_recon,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-recon"}
|
||||
]}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_retainer,
|
||||
[{description, "EMQ X Retainer"},
|
||||
{vsn, "4.4.4"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Retainer"},
|
||||
{vsn, "4.4.5"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_retainer_sup]},
|
||||
{applications, [kernel,stdlib]},
|
||||
{mod, {emqx_retainer_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-retainer"}
|
||||
]}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_rule_engine,
|
||||
[{description, "EMQ X Rule Engine"},
|
||||
{vsn, "4.4.15"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Rule Engine"},
|
||||
{vsn, "4.4.16"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_rule_engine_sup, emqx_rule_registry, emqx_rule_engine_jwt_sup]},
|
||||
{applications, [kernel,stdlib,rulesql,getopt,jose]},
|
||||
{mod, {emqx_rule_engine_app, []}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-rule-engine"}
|
||||
]}
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{<<"4\\.4\\.1[3-4]">>,
|
||||
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
[{"4.4.15",
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.1[3-4]">>,
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.12",
|
||||
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||
|
@ -16,7 +20,8 @@
|
|||
{update,emqx_rule_engine_jwt_sup,supervisor},
|
||||
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.11",
|
||||
[{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
{update,emqx_rule_engine_jwt_sup,supervisor},
|
||||
|
@ -25,10 +30,10 @@
|
|||
{load_module,emqx_rule_engine_sup,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
|
||||
{apply,{emqx_rule_engine_sup,ensure_api_delegator_started,[]}},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.10",
|
||||
[{add_module,emqx_rule_engine_jwt},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{add_module,emqx_rule_engine_jwt},
|
||||
{add_module,emqx_rule_engine_jwt_worker},
|
||||
{add_module,emqx_rule_engine_jwt_sup},
|
||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||
|
@ -45,7 +50,8 @@
|
|||
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.9",
|
||||
[{add_module,emqx_rule_engine_jwt},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{add_module,emqx_rule_engine_jwt},
|
||||
{add_module,emqx_rule_engine_jwt_worker},
|
||||
{add_module,emqx_rule_engine_jwt_sup},
|
||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||
|
@ -232,14 +238,18 @@
|
|||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{<<"4\\.4\\.1[3-4]">>,
|
||||
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
[{"4.4.15",
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.1[3-4]">>,
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.12",
|
||||
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||
|
@ -247,7 +257,8 @@
|
|||
{update,emqx_rule_engine_jwt_sup,supervisor},
|
||||
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.11",
|
||||
[{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
{update,emqx_rule_engine_jwt_sup,supervisor},
|
||||
|
@ -258,7 +269,8 @@
|
|||
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.10",
|
||||
[{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||
{apply,{emqx_rule_engine_sup,ensure_api_delegator_stopped,[]}},
|
||||
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
|
@ -276,7 +288,8 @@
|
|||
{delete_module,emqx_rule_engine_jwt_worker},
|
||||
{delete_module,emqx_rule_engine_jwt}]},
|
||||
{"4.4.9",
|
||||
[{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||
{apply,{emqx_rule_engine_sup,ensure_api_delegator_stopped,[]}},
|
||||
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
try (_EXP_)
|
||||
catch
|
||||
throw : Reason ->
|
||||
_EXP_ON_FAIL_,
|
||||
throw({_ERROR_CONTEXT_, Reason});
|
||||
_EXCLASS_:_EXCPTION_:_ST_ ->
|
||||
_EXP_ON_FAIL_,
|
||||
|
@ -492,13 +493,16 @@ delete_resource(ResId) ->
|
|||
case emqx_rule_registry:remove_resource(ResId) of
|
||||
ok ->
|
||||
_ = ?CLUSTER_CALL(clear_resource, [ModD, Destroy, ResId, ResType]),
|
||||
ok;
|
||||
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId);
|
||||
{error, _} = R -> R
|
||||
end
|
||||
catch
|
||||
throw:Reason -> {error, Reason}
|
||||
end;
|
||||
not_found ->
|
||||
%% always try to remove the dir as the resource might be created but have
|
||||
%% not been initialized yet.
|
||||
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId),
|
||||
{error, not_found}
|
||||
end.
|
||||
|
||||
|
@ -711,7 +715,9 @@ action_instance_id(ActionName) ->
|
|||
iolist_to_binary([atom_to_list(ActionName), "_", integer_to_list(erlang:system_time())]).
|
||||
|
||||
init_resource(Module, OnCreate, ResId, Config) ->
|
||||
Params = ?RAISE(Module:OnCreate(ResId, Config), {Module, OnCreate}),
|
||||
Params = ?RAISE(Module:OnCreate(ResId, Config),
|
||||
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId),
|
||||
{Module, OnCreate}),
|
||||
ResParams = #resource_params{id = ResId,
|
||||
params = Params,
|
||||
status = #{is_alive => true}},
|
||||
|
|
|
@ -265,6 +265,8 @@ take_action(#action_instance{id = Id, name = ActName, fallbacks = Fallbacks} = A
|
|||
emqx_rule_metrics:inc_actions_taken(Id),
|
||||
apply_action_func(Selected, Envs, Apply, ActName)
|
||||
of
|
||||
badact_quiet ->
|
||||
handle_action_failure(OnFailed, Id, Fallbacks, Selected, Envs, badact_quiet);
|
||||
{badact, Reason} ->
|
||||
handle_action_failure(OnFailed, Id, Fallbacks, Selected, Envs, Reason);
|
||||
Result -> Result
|
||||
|
@ -320,11 +322,13 @@ wait_action_on(Id, RetryN) ->
|
|||
end.
|
||||
|
||||
handle_action_failure(continue, _Id, Fallbacks, Selected, Envs = #{metadata := Metadata}, Reason) ->
|
||||
?LOG_RULE_ACTION(error, Metadata, "Continue next action, reason: ~0p", [Reason]),
|
||||
Reason =/= badact_quiet andalso
|
||||
?LOG_RULE_ACTION(error, Metadata, "Continue next action, reason: ~0p", [Reason]),
|
||||
_ = take_actions(Fallbacks, Selected, Envs, continue),
|
||||
failed;
|
||||
handle_action_failure(stop, Id, Fallbacks, Selected, Envs = #{metadata := Metadata}, Reason) ->
|
||||
?LOG_RULE_ACTION(error, Metadata, "Skip all actions, reason: ~0p", [Reason]),
|
||||
Reason =/= badact_quiet andalso
|
||||
?LOG_RULE_ACTION(error, Metadata, "Skip all actions, reason: ~0p", [Reason]),
|
||||
_ = take_actions(Fallbacks, Selected, Envs, continue),
|
||||
error({take_action_failed, {Id, Reason}}).
|
||||
|
||||
|
|
|
@ -40,6 +40,8 @@ groups() ->
|
|||
].
|
||||
|
||||
init_per_suite(Config) ->
|
||||
%% ensure alarm_handler started
|
||||
{ok, _} = application:ensure_all_started(sasl),
|
||||
ok = ekka_mnesia:start(),
|
||||
ok = emqx_rule_registry:mnesia(boot),
|
||||
Config.
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_sasl,
|
||||
[{description, "EMQ X SASL"},
|
||||
{vsn, "4.3.0"}, % strict semver, bump manually!
|
||||
[{description, "EMQX SASL"},
|
||||
{vsn, "4.3.1"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_sasl_sup]},
|
||||
{applications, [kernel,stdlib,pbkdf2]},
|
||||
{mod, {emqx_sasl_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-sasl"}
|
||||
]}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_sn,
|
||||
[{description, "EMQ X MQTT-SN Plugin"},
|
||||
{vsn, "4.3.8"}, % strict semver, bump manually!
|
||||
[{description, "EMQX MQTT-SN Plugin"},
|
||||
{vsn, "4.3.9"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel,stdlib,esockd]},
|
||||
{mod, {emqx_sn_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-sn"}
|
||||
]}
|
||||
|
|
|
@ -29,7 +29,8 @@
|
|||
{load_module,emqx_sn_app,brutal_purge,soft_purge,[]},
|
||||
{update,emqx_sn_gateway,{advanced,["4.3.2"]}}
|
||||
]},
|
||||
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]}
|
||||
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]},
|
||||
{<<".*">>,[]}
|
||||
],
|
||||
[
|
||||
{"4.3.7",[
|
||||
|
@ -60,5 +61,6 @@
|
|||
{load_module,emqx_sn_app,brutal_purge,soft_purge,[]},
|
||||
{update,emqx_sn_gateway,{advanced,["4.3.2"]}}
|
||||
]},
|
||||
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]}
|
||||
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]},
|
||||
{<<".*">>,[]}
|
||||
]}.
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_stomp,
|
||||
[{description, "EMQ X Stomp Protocol Plugin"},
|
||||
{vsn, "4.3.7"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Stomp Protocol Plugin"},
|
||||
{vsn, "4.3.8"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_stomp_sup]},
|
||||
{applications, [kernel,stdlib]},
|
||||
{mod, {emqx_stomp,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-stomp"}
|
||||
]}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_web_hook,
|
||||
[{description, "EMQ X WebHook Plugin"},
|
||||
{vsn, "4.3.16"}, % strict semver, bump manually!
|
||||
[{description, "EMQX WebHook Plugin"},
|
||||
{vsn, "4.3.18"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_web_hook_sup]},
|
||||
{applications, [kernel,stdlib,ehttpc]},
|
||||
{mod, {emqx_web_hook_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-web-hook"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.15",
|
||||
[{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.15",
|
||||
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.14",
|
||||
|
@ -32,7 +34,9 @@
|
|||
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.15",
|
||||
[{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.15",
|
||||
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
|
||||
{"4.3.14",
|
||||
|
|
2
build
2
build
|
@ -304,7 +304,7 @@ make_docker() {
|
|||
|
||||
## This function accepts any base docker image,
|
||||
## a emqx zip-image, and a image tag (for the image to be built),
|
||||
## to build a docker image which runs EMQ X
|
||||
## to build a docker image which runs EMQX
|
||||
##
|
||||
## Export below variables to quickly build an image
|
||||
##
|
||||
|
|
|
@ -52,5 +52,4 @@
|
|||
|
||||
- Fix crash when updating a client's keepalive via the HTTP API if it connects with keepalive disabled [#9933](https://github.com/emqx/emqx/pull/9933).
|
||||
|
||||
- Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981).
|
||||
About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details.
|
||||
- Delete the files directory when `resources` were deleted to avoid files leaking [#10039](https://github.com/emqx/emqx/pull/10039).
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
## 增强
|
||||
|
||||
## 修复
|
||||
|
||||
- MongoDB 库已升级至支持 MongoDB 5.1 及以上版本[#9707](https://github.com/emqx/emqx/pull/9707)。
|
||||
|
||||
- 现在 Dashboard 支持 HAProxy 的 Proxy Protocol 了 [9803](https://github.com/emqx/emqx/pull/9803)。
|
||||
|
@ -20,7 +18,7 @@
|
|||
|
||||
- 为认证和授权添加了更多调试日志 [#9943](https://github.com/emqx/emqx/pull/9943)。
|
||||
|
||||
- 将统计数据 `live_connections.count` 和 `live_connections.max` 公开给 Prometheus [#9929](https://github.com/emqx/emqx/pull/9929).
|
||||
- 将统计数据 `live_connections.count` 和 `live_connections.max` 公开给 Prometheus [#9929](https://github.com/emqx/emqx/pull/9929)。
|
||||
|
||||
## 修复
|
||||
|
||||
|
@ -53,5 +51,4 @@
|
|||
|
||||
- 修复当客户端连接禁用 keepalive 时, 通过 HTTP API 更新其 keepalive 会崩溃的问题 [#9933](https://github.com/emqx/emqx/pull/9933)。
|
||||
|
||||
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
|
||||
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
|
||||
- 在 `资源` 删除时清理其文件目录以防止文件泄露 [#10039](https://github.com/emqx/emqx/pull/10039)。
|
||||
|
|
|
@ -1,6 +1,17 @@
|
|||
# v4.4.16
|
||||
|
||||
## Enhancements
|
||||
|
||||
- Change "EMQ X" to "EMQX" from the outputs of CLIs and names of plugins [#10099](https://github.com/emqx/emqx/pull/10099).
|
||||
|
||||
## Bug fixes
|
||||
|
||||
- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094).
|
||||
|
||||
- Avoid changing the payload of MQTT messages when printing debug logs [#10091](https://github.com/emqx/emqx/pull/10091).
|
||||
Before this fix, if EMQX receives a message with Payload "e\ne\nc\nc\n2\n\n\n", the log message will be as follows:
|
||||
```
|
||||
2023-03-08T13:28:04.320622+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=e, e, c, c, 2, , , )
|
||||
```
|
||||
This is the corresponding log message now:
|
||||
```
|
||||
2023-03-08T14:26:50.935575+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=<<"e\ne\nc\nc\n2\n\n\n">>)
|
||||
```
|
||||
|
|
|
@ -1,5 +1,17 @@
|
|||
# v4.4.15
|
||||
# v4.4.16
|
||||
|
||||
## 增强
|
||||
|
||||
- 从命令行的输出里和插件的名字中,把 "EMQ X" 改成 "EMQX" [#10099](https://github.com/emqx/emqx/pull/10099)。
|
||||
|
||||
## 修复
|
||||
|
||||
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。
|
||||
- 避免打印 debug 日志的时候改动 MQTT 消息的 Payload 的内容 [#10091](https://github.com/emqx/emqx/pull/10091)。
|
||||
在这个修复之前,如果 EMQX 收到一个 Payload 为 "e\ne\nc\nc\n2\n\n\n" 的消息,日志打印会变成这样:
|
||||
```
|
||||
2023-03-08T13:28:04.320622+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=e, e, c, c, 2, , , )
|
||||
```
|
||||
这是此修复之后的样子:
|
||||
```
|
||||
2023-03-08T14:26:50.935575+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=<<"e\ne\nc\nc\n2\n\n\n">>)
|
||||
```
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
# v4.4.17
|
||||
|
||||
## Enhancements
|
||||
|
||||
## Bug fixes
|
||||
|
||||
- Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981).
|
||||
About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details.
|
||||
|
||||
- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094).
|
|
@ -0,0 +1,10 @@
|
|||
# v4.4.17
|
||||
|
||||
## 增强
|
||||
|
||||
## 修复
|
||||
|
||||
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
|
||||
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
|
||||
|
||||
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。
|
|
@ -63,8 +63,20 @@
|
|||
<<"4.4.13">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
|
||||
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
|
||||
otp => <<"24.3.4.2-1">>}}.
|
||||
{<<"4.4.15">>,
|
||||
#{from_versions =>
|
||||
[<<"4.4.0">>,<<"4.4.1">>,<<"4.4.10">>,<<"4.4.11">>,<<"4.4.12">>,
|
||||
<<"4.4.13">>,<<"4.4.14">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
|
||||
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
|
||||
otp => <<"24.3.4.2-1">>}}.
|
||||
{<<"4.4.16">>,
|
||||
#{from_versions =>
|
||||
[<<"4.4.0">>,<<"4.4.1">>,<<"4.4.10">>,<<"4.4.11">>,<<"4.4.12">>,
|
||||
<<"4.4.13">>,<<"4.4.14">>,<<"4.4.15">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
|
||||
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
|
||||
otp => <<"24.3.4.2-1">>}}.
|
||||
{<<"4.5.0">>,
|
||||
#{from_versions =>
|
||||
[<<"4.4.10">>,<<"4.4.11">>,<<"4.4.13">>,<<"4.4.14">>,<<"4.4.8">>,
|
||||
[<<"4.4.10">>,<<"4.4.11">>,<<"4.4.13">>,<<"4.4.14">>,<<"4.4.15">>,<<"4.4.16">>,<<"4.4.8">>,
|
||||
<<"4.4.9">>],
|
||||
otp => <<"24.3.4.2-1">>}}.
|
||||
|
|
|
@ -13,8 +13,8 @@ type: application
|
|||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
version: 4.4.14
|
||||
version: 4.4.16
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application.
|
||||
appVersion: 4.4.14
|
||||
appVersion: 4.4.16
|
||||
|
|
|
@ -243,7 +243,7 @@ Let's create a static node list cluster from docker-compose.
|
|||
+ Start the docker-compose cluster
|
||||
|
||||
```bash
|
||||
docker-compose -p my_emqx up -d
|
||||
docker compose -p my_emqx up -d
|
||||
```
|
||||
|
||||
+ View cluster
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
-ifndef(EMQX_ENTERPRISE).
|
||||
|
||||
-define(EMQX_RELEASE, {opensource, "4.4.14"}).
|
||||
-define(EMQX_RELEASE, {opensource, "4.4.16"}).
|
||||
|
||||
-else.
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_dashboard,
|
||||
[{description, "EMQX Web Dashboard"},
|
||||
{vsn, "4.4.14"}, % strict semver, bump manually!
|
||||
{vsn, "4.4.15"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_dashboard_sup]},
|
||||
{applications, [kernel,stdlib,mnesia,minirest]},
|
||||
{mod, {emqx_dashboard_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-dashboard"}
|
||||
]}
|
||||
|
|
|
@ -155,11 +155,11 @@ rewrite(Topic, MP, Dest, Binds) ->
|
|||
NewTopic.
|
||||
|
||||
fill_client_binds(#{clientid := ClientId, username := Username}) ->
|
||||
filter_client_binds([{"%c", ClientId}, {"%u", Username}]);
|
||||
filter_client_binds([{"%c", bin(ClientId)}, {"%u", bin(Username)}]);
|
||||
|
||||
fill_client_binds(#message{from = ClientId, headers = Headers}) ->
|
||||
Username = maps:get(username, Headers, undefined),
|
||||
filter_client_binds([{"%c", ClientId}, {"%u", Username}]).
|
||||
filter_client_binds([{"%c", bin(ClientId)}, {"%u", bin(Username)}]).
|
||||
|
||||
filter_client_binds(Binds) ->
|
||||
lists:filter(fun({_, undefined}) -> false;
|
||||
|
@ -184,3 +184,7 @@ validate_topic(Type, Topic) ->
|
|||
error:Reason ->
|
||||
{error, Reason}
|
||||
end.
|
||||
|
||||
bin(S) when is_binary(S) -> S;
|
||||
bin(S) when is_list(S) -> list_to_binary(S);
|
||||
bin(S) when is_atom(S) -> atom_to_binary(S, utf8).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application, emqx_modules,
|
||||
[{description, "EMQ X Module Management"},
|
||||
{vsn, "4.4.9"},
|
||||
[{description, "EMQX Module Management"},
|
||||
{vsn, "4.4.10"},
|
||||
{modules, []},
|
||||
{applications, [kernel,stdlib]},
|
||||
{mod, {emqx_modules_app, []}},
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{<<"4\\.4\\.[6-8]">>,
|
||||
[{"4.4.9",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[6-8]">>,
|
||||
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_mod_acl_internal,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]},
|
||||
|
@ -38,7 +39,8 @@
|
|||
{load_module,emqx_mod_sup,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<".*">>,[]}],
|
||||
[{<<"4\\.4\\.[6-8]">>,
|
||||
[{"4.4.9",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.4\\.[6-8]">>,
|
||||
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_mod_acl_internal,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]},
|
||||
|
|
|
@ -58,13 +58,13 @@ set_special_configs(_App) ->
|
|||
t_load_case(_) ->
|
||||
UnHooks = emqx_hooks:lookup('message.publish'),
|
||||
?assertEqual([], UnHooks),
|
||||
ok = emqx_mod_delayed:load([]),
|
||||
_ = emqx_mod_delayed:load([]),
|
||||
Hooks = emqx_hooks:lookup('message.publish'),
|
||||
?assertEqual(1, length(Hooks)),
|
||||
ok.
|
||||
|
||||
t_delayed_message(_) ->
|
||||
ok = emqx_mod_delayed:load([]),
|
||||
_ = emqx_mod_delayed:load([]),
|
||||
DelayedMsg = emqx_message:make(?MODULE, 1, <<"$delayed/1/publish">>, <<"delayed_m">>),
|
||||
?assertEqual({stop, DelayedMsg#message{topic = <<"publish">>, headers = #{allow_publish => false}}}, on_message_publish(DelayedMsg)),
|
||||
|
||||
|
@ -81,7 +81,7 @@ t_delayed_message(_) ->
|
|||
ok = emqx_mod_delayed:unload([]).
|
||||
|
||||
t_banned_delayed(_) ->
|
||||
ok = emqx_mod_delayed:load([]),
|
||||
_ = emqx_mod_delayed:load([]),
|
||||
ClientId1 = <<"bc1">>,
|
||||
ClientId2 = <<"bc2">>,
|
||||
|
||||
|
@ -119,6 +119,7 @@ t_banned_delayed(_) ->
|
|||
snabbkaffe:stop(),
|
||||
|
||||
emqx_banned:delete(Who),
|
||||
timer:sleep(500),
|
||||
EmptyKey = mnesia:dirty_all_keys(emqx_mod_delayed),
|
||||
?assertEqual([], EmptyKey),
|
||||
ok = emqx_mod_delayed:unload([]).
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{application, emqx_telemetry,
|
||||
[{description, "EMQ X Telemetry"},
|
||||
{vsn, "4.3.4"}, % strict semver, bump manually!
|
||||
[{description, "EMQX Telemetry"},
|
||||
{vsn, "4.3.6"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, [emqx_telemetry_sup]},
|
||||
{applications, [kernel,stdlib]},
|
||||
{mod, {emqx_telemetry_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx-telemetry"}
|
||||
]}
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.3.3",[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[0-2]">>,
|
||||
[{<<"4\\.3\\.[0-4]">>,
|
||||
[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.3.3",[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
|
||||
{<<"4\\.3\\.[0-2]">>,
|
||||
[{<<"4\\.3\\.[0-4]">>,
|
||||
[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
|
||||
{<<".*">>,[]}]}.
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
|
||||
enabled :: undefined | boolean(),
|
||||
|
||||
url :: string(),
|
||||
url :: undefined | string(),
|
||||
|
||||
report_interval :: undefined | non_neg_integer(),
|
||||
|
||||
|
@ -90,6 +90,8 @@
|
|||
|
||||
-define(TELEMETRY, emqx_telemetry).
|
||||
|
||||
-define(HTTP_TIMEOUT, 10).
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% Mnesia bootstrap
|
||||
%%--------------------------------------------------------------------
|
||||
|
@ -115,19 +117,19 @@ stop() ->
|
|||
gen_server:stop(?MODULE).
|
||||
|
||||
enable() ->
|
||||
gen_server:call(?MODULE, enable).
|
||||
gen_server:call(?MODULE, enable, infinity).
|
||||
|
||||
disable() ->
|
||||
gen_server:call(?MODULE, disable).
|
||||
gen_server:call(?MODULE, disable, infinity).
|
||||
|
||||
is_enabled() ->
|
||||
gen_server:call(?MODULE, is_enabled).
|
||||
gen_server:call(?MODULE, is_enabled, infinity).
|
||||
|
||||
get_uuid() ->
|
||||
gen_server:call(?MODULE, get_uuid).
|
||||
gen_server:call(?MODULE, get_uuid, infinity).
|
||||
|
||||
get_telemetry() ->
|
||||
gen_server:call(?MODULE, get_telemetry).
|
||||
gen_server:call(?MODULE, get_telemetry, infinity).
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% gen_server callbacks
|
||||
|
@ -353,15 +355,18 @@ report_telemetry(State = #state{url = URL}) ->
|
|||
Data = get_telemetry(State),
|
||||
case emqx_json:safe_encode(Data) of
|
||||
{ok, Bin} ->
|
||||
httpc_request(post, URL, [], Bin),
|
||||
_ = httpc_request(post, URL, [], Bin),
|
||||
?tp(debug, telemetry_data_reported, #{});
|
||||
{error, Reason} ->
|
||||
%% debug? why?
|
||||
?tp(debug, telemetry_data_encode_error, #{data => Data, reason => Reason})
|
||||
end.
|
||||
|
||||
%% we might set url = undefined in testcase
|
||||
httpc_request(_, undefined, _, _) ->
|
||||
ignore;
|
||||
httpc_request(Method, URL, Headers, Body) ->
|
||||
HTTPOptions = [{timeout, timer:seconds(10)}, {ssl, [{verify, verify_none}]}],
|
||||
HTTPOptions = [{timeout, timer:seconds(?HTTP_TIMEOUT)}, {ssl, [{verify, verify_none}]}],
|
||||
Options = [],
|
||||
httpc:request(Method, {URL, Headers, "application/json", Body}, HTTPOptions, Options).
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ t_uuid(_) ->
|
|||
{ok, UUID2} = emqx_telemetry:get_uuid(),
|
||||
emqx_telemetry:stop(),
|
||||
emqx_telemetry:start_link([{enabled, true},
|
||||
{url, "https://telemetry.emqx.io/api/telemetry"},
|
||||
{url, undefined},
|
||||
{report_interval, 7 * 24 * 60 * 60}]),
|
||||
{ok, UUID3} = emqx_telemetry:get_uuid(),
|
||||
?assertEqual(UUID2, UUID3).
|
||||
|
@ -80,7 +80,7 @@ t_send_after_enable(_) ->
|
|||
ok = snabbkaffe:start_trace(),
|
||||
try
|
||||
ok = emqx_telemetry:enable(),
|
||||
?assertMatch({ok, _}, ?block_until(#{?snk_kind := telemetry_data_reported}, 2000, 100))
|
||||
?assertMatch({ok, _}, ?block_until(#{?snk_kind := telemetry_data_reported}, 15000, 100))
|
||||
after
|
||||
ok = snabbkaffe:stop()
|
||||
end.
|
||||
|
|
|
@ -186,9 +186,9 @@ distro() ->
|
|||
_ -> false
|
||||
end.
|
||||
|
||||
emqx_description(cloud, true) -> "EMQ X Enterprise";
|
||||
emqx_description(cloud, false) -> "EMQ X Broker";
|
||||
emqx_description(edge, _) -> "EMQ X Edge".
|
||||
emqx_description(cloud, true) -> "EMQX Enterprise";
|
||||
emqx_description(cloud, false) -> "EMQX Broker";
|
||||
emqx_description(edge, _) -> "EMQX Edge".
|
||||
|
||||
overlay_vars(_RelType, PkgType, true) ->
|
||||
ee_overlay_vars(PkgType);
|
||||
|
|
|
@ -15,10 +15,10 @@ set -euo pipefail
|
|||
help() {
|
||||
echo
|
||||
echo "-h|--help: To display this usage information"
|
||||
echo "--profile <PROFILE>: EMQ X profile to build, e.g. emqx, emqx-edge"
|
||||
echo "--profile <PROFILE>: EMQX profile to build, e.g. emqx, emqx-edge"
|
||||
echo "--pkgtype zip|pkg: Specify which package to build, zip for .zip and pkg for .rpm or .deb"
|
||||
echo "--arch amd64|arm64: Target arch to build the EMQ X package for"
|
||||
echo "--src_dir <SRC_DIR>: EMQ X source ode in this dir, default to PWD"
|
||||
echo "--arch amd64|arm64: Target arch to build the EMQX package for"
|
||||
echo "--src_dir <SRC_DIR>: EMQX source ode in this dir, default to PWD"
|
||||
echo "--builder <BUILDER>: Builder image to pull"
|
||||
echo " E.g. ghcr.io/emqx/emqx-builder/4.4-20:24.3.4.2-1-debian11"
|
||||
echo "--ssh: Pass ssh agent to the builder."
|
||||
|
|
|
@ -9,12 +9,12 @@ PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh)}"
|
|||
case "${PKG_VSN}" in
|
||||
4.3*)
|
||||
EMQX_CE_DASHBOARD_VERSION='v4.3.12'
|
||||
EMQX_EE_DASHBOARD_VERSION='v4.3.27'
|
||||
EMQX_EE_DASHBOARD_VERSION='v4.3.30'
|
||||
;;
|
||||
4.4*)
|
||||
# keep the above 4.3 untouched, otherwise conflicts!
|
||||
EMQX_CE_DASHBOARD_VERSION='v4.4.8'
|
||||
EMQX_EE_DASHBOARD_VERSION='v4.4.18'
|
||||
EMQX_CE_DASHBOARD_VERSION='v4.4.10'
|
||||
EMQX_EE_DASHBOARD_VERSION='v4.4.22'
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported version $PKG_VSN" >&2
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{application, emqx,
|
||||
[{id, "emqx"},
|
||||
{description, "EMQ X"},
|
||||
{description, "EMQX"},
|
||||
%% Note: this version is not the same as the release version! This
|
||||
%% is simply the emqx `application' version, which is separate from
|
||||
%% the emqx `release' version, which in turn is comprised of several
|
||||
%% apps, one of which is this. See `emqx_release.hrl' for more
|
||||
%% info.
|
||||
{vsn, "4.4.15"}, % strict semver, bump manually!
|
||||
{vsn, "4.4.16"}, % strict semver, bump manually!
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [ kernel
|
||||
|
@ -21,7 +21,7 @@
|
|||
{mod, {emqx_app,[]}},
|
||||
{env, []},
|
||||
{licenses, ["Apache-2.0"]},
|
||||
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
|
||||
{maintainers, ["EMQX Team <contact@emqx.io>"]},
|
||||
{links, [{"Homepage", "https://emqx.io/"},
|
||||
{"Github", "https://github.com/emqx/emqx"}
|
||||
]}
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
%% -*- mode: erlang -*-
|
||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||
{VSN,
|
||||
[{"4.4.14",
|
||||
[{"4.4.15",
|
||||
[{load_module,emqx,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_packet,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_app,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.14",
|
||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_keepalive,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_broker,brutal_purge,soft_purge,[]},
|
||||
|
@ -494,7 +499,12 @@
|
|||
{apply,{application,set_env,
|
||||
[gen_rpc,insecure_auth_fallback_allowed,true]}}]},
|
||||
{<<".*">>,[]}],
|
||||
[{"4.4.14",
|
||||
[{"4.4.15",
|
||||
[{load_module,emqx,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_packet,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_app,brutal_purge,soft_purge,[]}]},
|
||||
{"4.4.14",
|
||||
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_keepalive,brutal_purge,soft_purge,[]},
|
||||
{load_module,emqx_broker,brutal_purge,soft_purge,[]},
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
-include("logger.hrl").
|
||||
-include("types.hrl").
|
||||
|
||||
-logger_header("[EMQ X]").
|
||||
-logger_header("[EMQX]").
|
||||
|
||||
%% Start/Stop the application
|
||||
-export([ start/0
|
||||
|
|
|
@ -156,7 +156,10 @@ get_description() ->
|
|||
case os:getenv("EMQX_DESCRIPTION") of
|
||||
false -> Descr0;
|
||||
"" -> Descr0;
|
||||
Str -> string:strip(Str, both, $\n)
|
||||
Str ->
|
||||
%% We replace the "EMQ X" to "EMQX" incase the description has been
|
||||
%% loaded to the OS Envs and cannot be changed without reboot.
|
||||
replace_emq_x_to_emqx(string:strip(Str, both, $\n))
|
||||
end.
|
||||
|
||||
get_release() ->
|
||||
|
@ -183,3 +186,6 @@ start_autocluster() ->
|
|||
ekka:callback(reboot, fun emqx:reboot/0),
|
||||
_ = ekka:autocluster(?APP), %% returns 'ok' or a pid or 'any()' as in spec
|
||||
ok.
|
||||
|
||||
replace_emq_x_to_emqx(Str) ->
|
||||
re:replace(Str, "\\bEMQ X\\b", "EMQX", [{return,list}]).
|
||||
|
|
|
@ -438,7 +438,7 @@ format_variable(undefined, _) ->
|
|||
format_variable(Variable, undefined) ->
|
||||
format_variable(Variable);
|
||||
format_variable(Variable, Payload) ->
|
||||
[format_variable(Variable), ", Payload=", Payload].
|
||||
[format_variable(Variable), io_lib:format(", Payload=~0p", [Payload])].
|
||||
|
||||
format_variable(#mqtt_packet_connect{
|
||||
proto_ver = ProtoVer,
|
||||
|
|
|
@ -33,6 +33,7 @@ post_release_upgrade(FromRelVsn, _) ->
|
|||
?INFO("emqx has been upgraded from ~s to ~s!", [FromRelVsn, CurrRelVsn]),
|
||||
maybe_refresh_jwt_module(FromRelVsn),
|
||||
_ = maybe_restart_oracle_resources(FromRelVsn),
|
||||
_ = maybe_start_schema_registry(FromRelVsn),
|
||||
reload_components().
|
||||
|
||||
%% What to do after downgraded to an old release vsn.
|
||||
|
@ -98,17 +99,9 @@ maybe_refresh_jwt_module(_) ->
|
|||
|
||||
-ifdef(EMQX_ENTERPRISE).
|
||||
maybe_restart_oracle_resources("4.4." ++ PatchVsn0) ->
|
||||
try
|
||||
case list_to_integer(PatchVsn0) of
|
||||
PatchVsn when PatchVsn =< 14 ->
|
||||
emqx_rule_engine:start_all_resources_of_type(backend_oracle);
|
||||
_ -> ok
|
||||
end
|
||||
catch
|
||||
Err:Reason:ST ->
|
||||
?INFO("maybe_restart_oracle_resources failed: ~p", [{Err, Reason, ST}]),
|
||||
ok
|
||||
end;
|
||||
do_when_vsn_lte(PatchVsn0, 14, ?FUNCTION_NAME, fun() ->
|
||||
emqx_rule_engine:start_all_resources_of_type(backend_oracle)
|
||||
end);
|
||||
maybe_restart_oracle_resources(_) ->
|
||||
ok.
|
||||
|
||||
|
@ -118,3 +111,32 @@ maybe_restart_oracle_resources(_) ->
|
|||
ok.
|
||||
|
||||
-endif.
|
||||
|
||||
-ifdef(EMQX_ENTERPRISE).
|
||||
maybe_start_schema_registry("4.4." ++ PatchVsn0) ->
|
||||
do_when_vsn_lte(PatchVsn0, 15, ?FUNCTION_NAME, fun() ->
|
||||
emqx_plugins:load(emqx_schema_registry)
|
||||
end);
|
||||
maybe_start_schema_registry(_) ->
|
||||
ok.
|
||||
-else.
|
||||
maybe_start_schema_registry(_) ->
|
||||
ok.
|
||||
-endif.
|
||||
|
||||
-ifdef(EMQX_ENTERPRISE).
|
||||
do_when_vsn_lte(SrcVsnStr, TargetVsn, ActionName, Action) ->
|
||||
try
|
||||
case list_to_integer(SrcVsnStr) of
|
||||
Vsn when Vsn =< TargetVsn ->
|
||||
?INFO("doing ~p", [ActionName]),
|
||||
_ = Action(),
|
||||
ok;
|
||||
_ -> ok
|
||||
end
|
||||
catch
|
||||
Err:Reason:ST ->
|
||||
?INFO("~p failed: ~p", [ActionName, {Err, Reason, ST}]),
|
||||
ok
|
||||
end.
|
||||
-endif.
|
||||
|
|
|
@ -380,7 +380,7 @@ read_otp_version() ->
|
|||
Filename = filename:join([ReleasesDir, emqx_app:get_release(), "BUILT_ON"]),
|
||||
case file:read_file(Filename) of
|
||||
{ok, BuiltOn} ->
|
||||
%% running on EQMX release
|
||||
%% running on EMQX release
|
||||
BuiltOn;
|
||||
{error, enoent} ->
|
||||
OtpMajor = erlang:system_info(otp_release),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{application, emqx_mini_plugin,
|
||||
[{description, "An EMQ X plugin for testcase"},
|
||||
[{description, "An EMQX plugin for testcase"},
|
||||
{vsn, "0.1"},
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
|
|
Loading…
Reference in New Issue