diff --git a/apps/emqx_auto_subscribe/etc/emqx_auto_subscribe.conf b/apps/emqx_auto_subscribe/etc/emqx_auto_subscribe.conf index c91b77aa1..f6d041dab 100644 --- a/apps/emqx_auto_subscribe/etc/emqx_auto_subscribe.conf +++ b/apps/emqx_auto_subscribe/etc/emqx_auto_subscribe.conf @@ -4,10 +4,12 @@ auto_subscribe { # { # topic = "/c/${clientid}", # qos = 0 - # }, + # rh = 0 + # rap = 0 + # nl = 0 + # } # { # topic = "/u/${username}", - # qos = 1 # }, # { # topic = "/h/${host}", @@ -15,15 +17,12 @@ auto_subscribe { # }, # { # topic = "/p/${port}", - # qos = 0 # }, # { # topic = "/topic/abc", - # qos = 0 # }, # { # topic = "/client/${clientid}/username/${username}/host/${host}/port/${port}", - # qos = 0 # } ] } diff --git a/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_api.erl b/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_api.erl index 7eeef52ff..97c9674b9 100644 --- a/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_api.erl +++ b/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_api.erl @@ -31,7 +31,7 @@ api_spec() -> schema() -> emqx_mgmt_util:schema( emqx_mgmt_api_configs:gen_schema( - emqx:get_raw_config([auto_subscribe, topics]))). + emqx:get_raw_config([auto_subscribe, topics])), <<"">>). auto_subscribe_api() -> Metadata = #{ diff --git a/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_placeholder.erl b/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_placeholder.erl index cbe881bde..70779770d 100644 --- a/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_placeholder.erl +++ b/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_placeholder.erl @@ -23,16 +23,17 @@ generate(Topics) when is_list(Topics) -> [generate(Topic) || Topic <- Topics]; -generate(#{qos := Qos, topic := Topic}) when is_binary(Topic) -> - #{qos => Qos, placeholder => generate(Topic, [])}. +generate(T0 = #{topic := Topic}) -> + T = maps:without([topic], T0), + T#{placeholder => generate(Topic, [])}. -spec(to_topic_table(list(), map(), map()) -> list()). -to_topic_table(PlaceHolders, ClientInfo, ConnInfo) -> +to_topic_table(PHs, ClientInfo, ConnInfo) -> [begin Topic0 = to_topic(PlaceHolder, ClientInfo, ConnInfo, []), {Topic, Opts} = emqx_topic:parse(Topic0), - {Topic, Opts#{qos => Qos}} - end || #{qos := Qos, placeholder := PlaceHolder} <- PlaceHolders]. + {Topic, Opts#{qos => Qos, rh => RH, rap => RAP, nl => NL}} + end || #{qos := Qos, rh := RH, rap := RAP, nl := NL, placeholder := PlaceHolder} <- PHs]. %%-------------------------------------------------------------------- %% internal diff --git a/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_schema.erl b/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_schema.erl index 73ae262a1..92420e217 100644 --- a/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_schema.erl +++ b/apps/emqx_auto_subscribe/src/emqx_auto_subscribe_schema.erl @@ -30,5 +30,14 @@ fields("auto_subscribe") -> fields("topic") -> [ {topic, emqx_schema:t(binary())} - , {qos, emqx_schema:t(integer(), undefined, 0)} + , {qos, t(hoconsc:union([0, 1, 2]), 0)} + , {rh, t(hoconsc:union([0, 1, 2]), 0)} + , {rap, t(hoconsc:union([0, 1]), 0)} + , {nl, t(hoconsc:union([0, 1]), 0)} ]. + +%%-------------------------------------------------------------------- +%% Internal functions +%%-------------------------------------------------------------------- +t(Type, Default) -> + hoconsc:t(Type, #{default => Default}).