fix: subscription about api, mqtt5 options param (#5620)

This commit is contained in:
DDDHuang 2021-09-01 17:42:57 +08:00 committed by GitHub
parent c4e279bb76
commit c7bc2e1a8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 12 deletions

View File

@ -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
# }
]
}

View File

@ -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 = #{

View File

@ -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

View File

@ -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}).