From 10bca7f6b553919f58630288e6d9fe678c5858b5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 20 Apr 2022 16:53:50 +0800 Subject: [PATCH 1/3] fix: topic filter with qos/clientid/share --- .../src/emqx_mgmt_api_subscriptions.erl | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl index 6b35d7a0a..484309dc2 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl @@ -67,7 +67,8 @@ list(Bindings, Params) when map_size(Bindings) == 0 -> Topic0 -> Topic = emqx_mgmt_util:urldecode(Topic0), Data = emqx_mgmt:list_subscriptions_via_topic(Topic, ?format_fun), - minirest:return({ok, add_meta(Params, Data)}) + FilterData = filter_subscriptions(Data, Params), + minirest:return({ok, add_meta(Params, FilterData)}) end; list(#{node := Node} = Bindings, Params) -> @@ -85,7 +86,8 @@ list(#{node := Node} = Bindings, Params) -> Topic0 -> Topic = emqx_mgmt_util:urldecode(Topic0), Data = emqx_mgmt:list_subscriptions_via_topic(Node, Topic, ?format_fun), - minirest:return({ok, add_meta(Params, Data)}) + FilterData = filter_subscriptions(Data, Params), + minirest:return({ok, add_meta(Params, FilterData)}) end. add_meta(Params, List) -> @@ -169,3 +171,30 @@ update_ms(share, X, {{Pid, Topic}, Opts}) -> {{Pid, Topic}, Opts#{share => X}}; update_ms(qos, X, {{Pid, Topic}, Opts}) -> {{Pid, Topic}, Opts#{qos => X}}. + +filter_subscriptions(Data0, Params) -> + Data1 = filter_by_key(qos, qos(Params), Data0), + Data2 = filter_by_key(clientid, proplists:get_value(<<"clientid">>, Params), Data1), + case proplists:get_value(<<"share">>, Params) of + undefined -> Data2; + Share -> + Prefix = filename:join([<<"$share">>, Share]), + Size = byte_size(Prefix), + lists:filter(fun(#{topic := Topic}) -> + case Topic of + <> -> true; + _ -> false + end + end, + Data2) + end. + +qos(Params) -> + case proplists:get_value(<<"qos">>, Params) of + undefined -> undefined; + Qos when is_integer(Qos) -> Qos; + Qos when is_binary(Qos) -> binary_to_integer(Qos) + end. + +filter_by_key(_Key, undefined, List) -> List; +filter_by_key(Key, Value, List) -> lists:filter(fun(E) -> Value =:= maps:get(Key, E) end, List). From 29e453383a5d48b5288eab4f2a420f6fab02d718 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Sun, 24 Apr 2022 16:48:12 +0800 Subject: [PATCH 2/3] chore: update changelog --- CHANGES-4.3.md | 5 +++++ apps/emqx_management/src/emqx_management.app.src | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES-4.3.md b/CHANGES-4.3.md index 623e2d399..7c618417a 100644 --- a/CHANGES-4.3.md +++ b/CHANGES-4.3.md @@ -10,6 +10,11 @@ File format: - One list item per change topic Change log ends with a list of github PRs +## v4.3.15 + +### Bug fixes +* List subscription topic (/api/v4/subscriptions), the result do not match with multiple conditions. + ## v4.3.14 ### Enhancements diff --git a/apps/emqx_management/src/emqx_management.app.src b/apps/emqx_management/src/emqx_management.app.src index bee65781a..64f44637a 100644 --- a/apps/emqx_management/src/emqx_management.app.src +++ b/apps/emqx_management/src/emqx_management.app.src @@ -1,6 +1,6 @@ {application, emqx_management, [{description, "EMQ X Management API and CLI"}, - {vsn, "4.3.11"}, % strict semver, bump manually! + {vsn, "4.3.12"}, % strict semver, bump manually! {modules, []}, {registered, [emqx_management_sup]}, {applications, [kernel,stdlib,minirest]}, From 4789f1f97ba5b2c6e41553faf997308925bb61d5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Sun, 24 Apr 2022 17:37:37 +0800 Subject: [PATCH 3/3] chore: bump management to 4.3.13 --- apps/emqx_management/src/emqx_management.app.src | 2 +- apps/emqx_management/src/emqx_management.appup.src | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx_management/src/emqx_management.app.src b/apps/emqx_management/src/emqx_management.app.src index 64f44637a..e203c7a56 100644 --- a/apps/emqx_management/src/emqx_management.app.src +++ b/apps/emqx_management/src/emqx_management.app.src @@ -1,6 +1,6 @@ {application, emqx_management, [{description, "EMQ X Management API and CLI"}, - {vsn, "4.3.12"}, % strict semver, bump manually! + {vsn, "4.3.13"}, % strict semver, bump manually! {modules, []}, {registered, [emqx_management_sup]}, {applications, [kernel,stdlib,minirest]}, diff --git a/apps/emqx_management/src/emqx_management.appup.src b/apps/emqx_management/src/emqx_management.appup.src index 7fa9b6d6f..9265913e6 100644 --- a/apps/emqx_management/src/emqx_management.appup.src +++ b/apps/emqx_management/src/emqx_management.appup.src @@ -1,13 +1,13 @@ %% -*- mode: erlang -*- {VSN, - [ {<<"4\\.3\\.([0-9]|1[0-1])">>, + [ {<<"4\\.3\\.([0-9]|1[0-2])">>, [ {apply,{minirest,stop_http,['http:management']}}, {apply,{minirest,stop_http,['https:management']}}, {restart_application, emqx_management} ]}, {<<".*">>, []} ], - [ {<<"4\\.3\\.([0-9]|1[0-1])">>, + [ {<<"4\\.3\\.([0-9]|1[0-2])">>, [ {apply,{minirest,stop_http,['http:management']}}, {apply,{minirest,stop_http,['https:management']}}, {restart_application, emqx_management}